Печать из PDF на термопринтер

Jeine

Да здравствует разум! Да сгинет маразм!
15 лет на форуме
Сообщения
6 431
Реакции
5 817
Они уже сгенерированы и помещены в PDF файл определенным образом
Таким, который Вас не устраивает.
Поэтому, чтобы не городить всякую дичь типа создания руками в индизайне и привлечения всякого разного рода обвеса для уже установленных программ, я и спросил, был ли задан вопрос поставщику. Но вы же уже ответили, что поставщик казёл, и надо самим выкручиваться. Хотя наверняка этого и не знаете.
Вопрос в том: PDF каким-то образом допускает редактирование документа с перемещение картинок в нужном порядке?
По умолчанию pdf не предназначен для редактирования. Да, есть куча инструментов для этого, но для Вашего случая они монструозны и оверизбыточны. Даже если не говорить об их стоимости.
 
  • Спасибо
Реакции: George

faecker

Участник
Топикстартер
Сообщения
11
Реакции
0
Именно так :)

Это проще чем вырезать из ваших файлов, поверьте :)

Ручками не значит вручную :) Это значит что не полностью автоматизированно, выдирал текст ручками, сформировал штрих-код (посредством шрифта Barcode) в экселе, макеты сделал индизайном, с помощью Data Merge
Я и говорю: это больше времени займет, чем их печатать один за другим, выделяя диапазон. Видимо, не разрешает PDF перемещение картинок?
 

Drawer

Участник
Сообщения
716
Реакции
262
Последнее редактирование:

faecker

Участник
Топикстартер
Сообщения
11
Реакции
0
Таким, который Вас не устраивает.
Поэтому, чтобы не городить всякую дичь типа создания руками в индизайне и привлечения всякого разного рода обвеса для уже установленных программ, я и спросил, был ли задан вопрос поставщику. Но вы же уже ответили, что поставщик казёл, и надо самим выкручиваться. Хотя наверняка этого и не знаете.

По умолчанию pdf не предназначен для редактирования. Да, есть куча инструментов для этого, но для Вашего случая они монструозны и оверизбыточны. Даже если не говорить об их стоимости.
Я думаю, что штрих-коды помещены в таком порядке, так как большинство печатает их на A4. Я хотел это дело автоматизировать для термо-принтера (в этом случае картинки надо переместить постранично по центру), но видимо не судьба. Удивительно, но нет решения.
 

Drawer

Участник
Сообщения
716
Реакции
262
  • Спасибо
Реакции: ~RA~

~RA~

12 лет на форуме
Сообщения
10 459
Реакции
3 011
 

Drawer

Участник
Сообщения
716
Реакции
262
Не совсем понял, это тут при чем?:)
 

~RA~

12 лет на форуме
Сообщения
10 459
Реакции
3 011
Разве задачка не аналогичная?
 

Drawer

Участник
Сообщения
716
Реакции
262
Разве задачка не аналогичная?
Не, там не предусмотрена раскладка кодов на лист, и если часть не влазит, то половина штрих-кода окажется на одной странице, половина на другой, потому я даже не рассматривал вариант, например, вырезать макеты по страницам.
1656337595488.png
 

Drawer

Участник
Сообщения
716
Реакции
262
А вообще было бы интересно посмотреть как ТС получает их с валбериса, есть подозрение что через pdf принтер. И тогда ему нужно только подобрать размер "листа" в допнастройках чтобы получить их постранично.
 

densen

15 лет на форуме
Сообщения
486
Реакции
343
А вообще было бы интересно посмотреть как ТС получает их с валбериса
Ко мне в частном порядке обратился форумчанин с аналогичным файлом (210x297 мм, 7 страниц, 8 кодов на странице) и просьбой помочь. Сделал ему sequence для QIP, что полностью решило вопрос.
Я так понял, что софт на Wildberries генерирует коды в длинную html-страницу, которая печатается в pdf на формат A4 и выдает pdf пользователю для скачивания. Получается полная ерунда, но проблемы пользователя никого не волнуют.
Единственным решением было "склеить" все страницы в одну длинную колбасу, подрезать снизу и справа, чтобы сформировать четкую виртуальную сетку в 26 кодов по вертикали и 2 кода по горизонтали, разбить на 52 части и потом привести эти части к формату 58x40 мм (по размеру этикетки) с одновременным смещением кода ровно по центру.
Wildberries еще косячит, что иногда выдает pdf, где 8 кодов на странице (4х2), а иногда по 10 кодов (5х2), как в файле у ТС.
 

Drawer

Участник
Сообщения
716
Реакции
262
Единственным решением было "склеить" все страницы в одну длинную колбасу
Трындец простите :)

Не по теме:
Ладно, не знаю чем сложнее генерировать из текстового файла (в конце концов если это кому-то нужно на постоянке, напишите, сделаю однокнопочное решение).

Но блин, столько телодвижений даже обработать имеющееся можно же проще... :)
 
Последнее редактирование:

Drawer

Участник
Сообщения
716
Реакции
262
Например :)
1.gif
 

densen

15 лет на форуме
Сообщения
486
Реакции
343
Трындец простите
Весь описанный мною процесс занимает две секунды. Я лишь подробно расписал алгоритм происходящего с исходным файлом.
Опиши текстом весь процесс, начиная с "открываем pdf в Иллюстраторе скриптом openMultiPagePDF", и сравним, у кого ушло меньше букв. =)
 

Drawer

Участник
Сообщения
716
Реакции
262

Вложения

  • 71x48_print-boxes-8528.pdf
    31.7 КБ · Просм.: 9
Последнее редактирование:

Drawer

Участник
Сообщения
716
Реакции
262

Не по теме:

как это приблизит страждущих к победе
Я не вижу их толпы.... поднимите мне веки... :)


Для страждущих:
Python:
import time
from pathlib import Path
from pyzbar import pyzbar
import argparse
import os
from inspect import getsourcefile
from pdf2image import convert_from_path
from reportlab.graphics.barcode import code128
from reportlab.graphics.shapes import Drawing
from reportlab.lib.units import mm
from reportlab.pdfgen import canvas
from reportlab.graphics import renderPDF
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-f", "--file", required=True,
    help="Generating cool barcodes sticker from fucking barcodes WildBerries")
args = vars(ap.parse_args())

inFile = Path(args['file'])
workFolder = inFile.parent
inFileName = inFile.stem
extFile = inFile.suffix
scriptPath = Path(getsourcefile(lambda:0)).parent

def clearTempFolder(mydir):
    filelist = [ f for f in os.listdir(mydir) if f.endswith(".pgm") ]
    for f in filelist:
        os.remove(os.path.join(mydir, f))

def createBarCodes(m, f):
    c = canvas.Canvas(f, pagesize=(71*mm, 48*mm))
    fontPath = Path(scriptPath, 'Lato.ttf')
    pdfmetrics.registerFont(TTFont('Lato', fontPath))
    for i in m:
        barcode128 = code128.Code128(i, barWidth = .98, barHeight=26.47*mm)
        codes = [barcode128]
        x = 1.6 * mm
        y = 7.2 * mm
        for code in codes:
            code.drawOn(c, x, y)
            c.setFont('Lato', 12)
            c.drawString(5.3*mm,37.8*mm, i)
        c.showPage()
    c.save()

poppler_path = Path(scriptPath, "bin")
tmpFolder = Path(scriptPath, "tmpBarcodesWB")
try:
    os.makedirs(tmpFolder)
except OSError:
    print ("Создать директорию %s не удалось" % tmpFolder)
else:
    print ("Успешно создана директория %s" % tmpFolder)
   
images_of_pdf = convert_from_path(inFile, dpi=150, poppler_path=poppler_path, grayscale=True, output_folder=tmpFolder)
barcodes = []
for image in images_of_pdf:
    barcodes = barcodes + pyzbar.decode(image)
    image.close()
   
print (str(len(barcodes)) + " barcodes detected!")

# loop over the detected barcodes
bar_code128_List = []
for barcode in barcodes:
    barcodeType = barcode.type
    if barcodeType == "CODE128":
        bar_code128_List.append(barcode.data.decode("utf-8"))
       
bar_code128_List = list(set(bar_code128_List))
bar_code128_List.sort()
new_splitFile = str(Path(workFolder, f"{71}x{48}_{inFileName}{extFile}"))
print ("Out file path: " + new_splitFile)
createBarCodes(bar_code128_List, new_splitFile)

clearTempFolder(tmpFolder)

try:
    os.rmdir(tmpFolder)
except OSError:
    print ("Удалить директорию %s не удалось" % tmpFolder)
else:
    print ("Успешно удалена директория %s" % tmpFolder)
 
Последнее редактирование:
  • Спасибо
Реакции: ~RA~ и densen

romyk

Участник
Сообщения
1 285
Реакции
219
Если коды всегда идут по порядку, то не проще их самому генерить?
Это я про тех, кто не владееет секретными технологиями написания скриптов.