Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизПроблема с изменением pdf файла Найти похожие ветки
← →
Lowlander © (2010-03-09 14:29) [0]Необходимо открывать pdf файл в текстовом варианте, вместе со всеми элементами структуры, вносить изменения и сохранять. В последнем как раз у меня проблема, после внесения изменений не хочет сохранятся как pdf, т.е. видимо просто при сохранении не записывает элементы структуры самого документа. Подскажите пожалуйста, в каком направлении искать, пока все что не пробовал - отрицательный результат..
← →
oldman © (2010-03-09 16:29) [1]Делай это акробатом и не изобретай суперпупервелосипедища...
← →
абизяна (2010-03-09 16:51) [2]Ну если уже редактировать получается, то дальше всё просто: нужно установить драйвер для печати в PDF и далее, просто, печатать в PDF файл.
← →
Lowlander © (2010-03-10 10:07) [3]
> Делай это акробатом и не изобретай суперпупервелосипедища.
> ..
Весь смысл что я могу добавлять ватермарку через структуру, но еще у пдф есть такое свойство как printstate и его мне тоже нужно изменять. Через акробат просто нереально, т.к. таких документов бывает по 50-600 штук внушительных размеров и подкачиваются они из локалки, и если делать это вручную, то будешь этим заниматься сутками, уже пробывал, на 50 документов уходит около 1,5 часов бездумного кликанья в акробате
> Ну если уже редактировать получается, то дальше всё просто:
> нужно установить драйвер для печати в PDF и далее, просто,
> печатать в PDF файл.
Тоже не вариант, так как я вношу изменения не в текст документа, а в его структуру - ватермарку и печать документа, соответственно если буду печатать в пдф напрямую, необходимые мне изменения просто не сохранятся
← →
brother © (2010-03-10 10:13) [4]1. PDF это формат, значит, эли ты знаешь все о его структкре и можещь ее читать, то что мешает сохранить в pdf?
2. а теперь подробненько: как считываешь структуру файла, куда, как изменяешь? что значит:
> не хочет сохранятся как pdf
и с чего ты взял это:
> не записывает элементы структуры самого документа
в общем больше вопросов...
← →
Lowlander © (2010-03-10 10:20) [5]Действую просто - потоком копирую из пдф в текстовый(структура копируется вместе с текстом), там ищу строку и заменяю ее(тоже все нормально), сохраняю в пдф(а тут уже все плохо..) - файлы после это не открываются с ошибкой - нарушена структура файла. Если открывать напрямую пдф - читает только часть файла..
← →
Lowlander © (2010-03-10 10:36) [6]Просто хоть предложите какой нибудь другой подход или подскажите что я упускаю, почему сохраняемый пдф теряет структуру и текст..
← →
Плохиш © (2010-03-10 11:11) [7]
> Действую просто - потоком копирую из пдф в текстовый(структура
> копируется вместе с текстом), там ищу строку и заменяю ее(тоже
> все нормально)
Изменять надо побайтно, чтобы длина потока/строки не изменилась.
← →
Anatoly Podgoretsky © (2010-03-10 11:13) [8]> Lowlander (10.03.2010 10:07:03) [3]
Acrobat это СОМ сервер, поэтому кликать ничего не надо, он хорошо подается автоматизации.
← →
Anatoly Podgoretsky © (2010-03-10 11:19) [9]> Lowlander (10.03.2010 10:36:06) [6]
У тебя ошибка в программе.
← →
Lowlander © (2010-03-10 11:41) [10]Вот таким образом я передаю в акробат текст ватермарки, но я не в курсе как заставить акробат самостоятельно добавлять ее в документы и изменять принтстейт на нужный мне..
procedure CreateWaterSet(CustName, DatOn, NumZak, NameText: string);
var FS: TFileStream;
MS: TMemoryStream;
B: Byte;
s: string;
begin
{UTF-8 EF BB BF; UTF-16BE FE FF; UTF-16LE FF FE}
//%SystemRoot%\system32\charmap.exe
s:="<?xml version = "1.0" encoding = "UTF-8" ?>";
s:=s+"<WatermarkSettings version = "8.0">";
s:=s+"<Font name="Arial" size="24.0"/>";
s:=s+"Копия официального электронного издания"#13#10;
s:=s+"("+CustName+" от "+DatOn+" № "+NumZak+")";
s:=s+"<Scale value="-0.5"/>";
s:=s+"<Rotation value="90"/>";
s:=s+"<Opacity value="0.5"/>";
s:=s+"<Location ontop="0"/>";
s:=s+"<Color b="0.0" r="0.0" g="0.0"/>";
s:=s+"<Alignment unit="1" horizvalue="0.0" vertvalue="0.0" horizalign="0" vertalign="1"/>";
s:=s+"<Appearance onscreen="0" onprint="1" fixedprint="1"/>";
s:=s+"<PageRange end="-1" start="-1" even="1" odd="1"/>";
s:=s+"</WatermarkSettings>";
s:=Chr(65279)+AnsiToUtf8(trim(s));
MS:=TMemoryStream.Create;
MS.WriteBuffer(PChar(s)^, length(s));
MS.Position:=0;
MS.ReadBuffer(B, 1);
FS:=TFileStream.Create(NameText, fmCreate);
FS.CopyFrom(MS, MS.Size-1);
MS.Free;
FS.Free;
end;
//C:\Program Files\Adobe\Acrobat 8.0\Acrobat\
← →
brother © (2010-03-10 11:57) [11]У, все, я пас...
← →
Плохиш © (2010-03-10 13:28) [12]
> Lowlander © (10.03.10 11:41) [10]
>
> Вот таким образом я передаю в акробат текст ватермарки
И где там упоминается акробат, кроме как в комментарии?
Какой смысл в этих манипуляциях, кроме как выкидывания первого символа в собранной строке и записывания получившегося в итоге мусора в файл?
← →
абизяна (2010-03-10 17:10) [13]Попробуйте этот компонент: http://codingrus.ru/infusions/pro_download_panel/download.php?did=356
Я его не тестировал, но демо смотрел - вроде бы может редактировать и сохранять в файл, но поддерживает не все функции PDF.
← →
QAZ (2010-03-12 10:11) [14]по ходу видно,что афтар вообще понятия не имеет о спецификации файла и открывает его тупо как текст
и уш темболее не в курсе, что целостность любый вменяемых форматов проверяется контрольными суммами
которые при тупом изменении букафф,естесственно не будут несовпадать
← →
Lowlander © (2010-03-12 10:39) [15]
> И где там упоминается акробат, кроме как в комментарии?
пардон, не ту процедуру вставил
> по ходу видно,что афтар вообще понятия не имеет о спецификации
> файла и открывает его тупо как текст
> и уш темболее не в курсе, что целостность любый вменяемых
> форматов проверяется контрольными суммами
> которые при тупом изменении букафф,естесственно не будут
> несовпадать
>
>
Товарисч, проведите эксперимент на досуге,вставте в пдф файл вотермарку откройте любым редактором и измените количество "букафф" в вотермарке на произвольное - вы будете удивлены, но целостность структуры сохраняется.
← →
QAZ (2010-03-12 12:26) [16]
> Товарисч, проведите эксперимент на досуге,вставте в пдф
> файл вотермарку откройте любым редактором и измените количество
> "букафф" в вотермарке на произвольное - вы будете удивлены,
> но целостность структуры сохраняется.
если вставить марку акробатом а потом заменить ее текст в гексредакторе то да она изменица и откроется
но как я понял твоя цель не менять а добавлять марку, а для этого надо знать формат файла,куда и что можно вставлять
если же марка уже стоит в документе и тебе ее надо изменить,а в итоге несрост-проблема в твоем коде
← →
Anatoly Podgoretsky © (2010-03-12 13:32) [17]> QAZ (12.03.2010 12:26:16) [16]
Никакие форматы знать не надо, для этого есть DOM, а акробат является СОМ сервером. Не надо в него тупо писать, им рулить нужно.
← →
Lowlander © (2010-03-15 11:08) [18]
> если вставить марку акробатом а потом заменить ее текст
> в гексредакторе то да она изменица и откроется
> но как я понял твоя цель не менять а добавлять марку, а
> для этого надо знать формат файла,куда и что можно вставлять
>
> если же марка уже стоит в документе и тебе ее надо изменить,
> а в итоге несрост-проблема в твоем коде
Вот именно, об этом я и спрашиваю! Ну не получается у меня делать это программно, я все таки начинающий, но это совершенно не значит что я не разбирался с структурой пдф. Просто прошу подсказать как это сделать правильно если уж у меня совсем труба с исполнением..
> Никакие форматы знать не надо, для этого есть DOM, а акробат
> является СОМ сервером. Не надо в него тупо писать, им рулить
> нужно.
Анатолий, подскажите, пожалуйста, КАК это сделать или где почитать об этом.
← →
Lowlander © (2010-03-15 11:19) [19]Когда я использую сторонние компоненты то вотермарку я делаю спокойно и без запуска акробата, но вот как изменить свойство принтстайт? изменение этого свойства не обнаружил ни в одном компоненте, поэтому и приходится пользоваться акробатом
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.055 c