QR-код в качестве разделителя документов / Разделение большого PDF-файла с несколькими документами на один PDF-файл - PullRequest
0 голосов
/ 10 ноября 2019

Я хочу разделить большой файл PDF (который содержит несколько документов) на соответствующие отдельные документы. Документы идентифицируются с помощью QR-кода на первой странице документа.

Используя zbarimg, я могу создать файл XML, который содержит номер страницы, по которой был найден штрих-код документа, и содержимое штрих-кода. (zbarimg ставит 0 для первой страницы PDF вместо 1)

Последняя страница PDF может быть найдена с помощью

Pages=$(pdfinfo "$Datei" | grep Pages | awk '{print $2}')

Из вывода XML zbarimg

<index num='0'> 
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6037675;;]]></data>
</symbol>
</index>
<index num='2'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6033793;;]]></data>
</symbol>

Окончательный результат может быть:

  • Файл 6037675.pdf (генерируется "pdftk full-pdf.pdf cat 1-2 output 6037675.pdf")
  • Файл6037675.txt, содержащий текст «SLERP: V: 1; T: 3; F: 101; D0: 6037675 ;;» *

    $ pdftk input-pdf.pdf cat page-range output output destination.pdf $ pdftkinput-pdf.pdf cat 1-2 output 6037675.pdf $ pdftk input-pdf.pdf cat 3-8 output 6037675.pdf $ pdftk input-pdf.pdf cat 9-10 output 6037675.pdf $ pdftk input-pdf.pdfвывод cat 11-12 6037675.pdf $ pdftk input-pdf.pdf вывод cat 13-15 6037675.pdf ....... $ pdftk input-pdf.pdf cat 127-131 вывод 6037675.pdf $ pdftk input-pdf.pdf cat 132-132 вывод 6037675.pdf $ pdftk input-pdf.pdf cat 133-135 вывод 6037675.pdf

Пример вывода zbarimg:

$ zbarimg --xml -Sdisable -Sqrcode.enable big-a1-VERS20191108035602-20955.pdf

<barcodes xmlns='http://zbar.sourceforge.net/2008/barcode'>
<source href='big-a1-VERS20191108035602-20955.pdf'>
<index num='0'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6037675;;]]></data></symbol>
</index>
<index num='2'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6033793;;]]></data></symbol>
</index>
<index num='8'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6040319;;]]></data></symbol>
</index>
<index num='10'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6036855;;]]></data></symbol>
</index>
<index num='12'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6034552;;]]></data></symbol>
</index>
<index num='15'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6037436;;]]></data></symbol>
</index>
<index num='18'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6035756;;]]></data></symbol>
</index>
<index num='22'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6034564;;]]></data></symbol>
</index>
<index num='23'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6034706;;]]></data></symbol>
</index>
<index num='26'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6037942;;]]></data></symbol>
</index>
<index num='29'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6040949;;]]></data></symbol>
</index>
<index num='31'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6041317;;]]></data></symbol>
</index>
<index num='32'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6041256;;]]></data></symbol>
</index>
<index num='36'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6041340;;]]></data></symbol>
</index>
<index num='38'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6040313;;]]></data></symbol>
</index>
<index num='43'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6042032;;]]></data></symbol>
</index>
<index num='45'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6042041;;]]></data></symbol>
</index>
<index num='48'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6041259;;]]></data></symbol>
</index>
<index num='57'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6042074;;]]></data></symbol>
</index>
<index num='69'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6038070;;]]></data></symbol>
</index>
<index num='72'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6039847;;]]></data></symbol>
</index>
<index num='91'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6039853;;]]></data></symbol>
</index>
<index num='101'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6038496;;]]></data></symbol>
</index>
<index num='103'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6038492;;]]></data></symbol>
</index>
<index num='107'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6038588;;]]></data></symbol>
</index>
<index num='111'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6038131;;]]></data></symbol>
</index>
<index num='113'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6038865;;]]></data></symbol>
</index>
<index num='116'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6038734;;]]></data></symbol>
</index>
<index num='124'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6037781;;]]></data></symbol>
</index>
<index num='126'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6037814;;]]></data></symbol>
</index>
<index num='131'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6037893;;]]></data></symbol>
</index>
<index num='132'>
<symbol type='QR-Code' quality='1'><data><![CDATA[SLERP:V:1;T:3;F:101;D0:6037564;;]]></data></symbol>
</index>
</source>
</barcodes>
scanned 32 barcode symbols from 135 images in 37 seconds
...