![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с изменением pdf файла [D7, 2003]
Lowlander © (2010-03-09 14:29:00)Необходимо открывать pdf файл в текстовом варианте, вместе со всеми элементами структуры, вносить изменения и сохранять. В последнем как раз у меня проблема, после внесения изменений не хочет сохранятся как pdf, т.е. видимо просто при сохранении не записывает элементы структуры самого документа. Подскажите пожалуйста, в каком направлении искать, пока все что не пробовал - отрицательный результат..
Lowlander (2010-03-15 11:19:00) [1]Когда я использую сторонние компоненты то вотермарку я делаю спокойно и без запуска акробата, но вот как изменить свойство принтстайт? изменение этого свойства не обнаружил ни в одном компоненте, поэтому и приходится пользоваться акробатом
Lowlander (2010-03-15 11:08:00) [2]
> если вставить марку акробатом а потом заменить ее текст
> в гексредакторе то да она изменица и откроется
> но как я понял твоя цель не менять а добавлять марку, а
> для этого надо знать формат файла,куда и что можно вставлять
>
> если же марка уже стоит в документе и тебе ее надо изменить,
> а в итоге несрост-проблема в твоем коде
Вот именно, об этом я и спрашиваю! Ну не получается у меня делать это программно, я все таки начинающий, но это совершенно не значит что я не разбирался с структурой пдф. Просто прошу подсказать как это сделать правильно если уж у меня совсем труба с исполнением..
> Никакие форматы знать не надо, для этого есть DOM, а акробат
> является СОМ сервером. Не надо в него тупо писать, им рулить
> нужно.
Анатолий, подскажите, пожалуйста, КАК это сделать или где почитать об этом.
Anatoly Podgoretsky (2010-03-12 13:32:00) [3]> QAZ (12.03.2010 12:26:16) [16]
Никакие форматы знать не надо, для этого есть DOM, а акробат является СОМ сервером. Не надо в него тупо писать, им рулить нужно.
QAZ (2010-03-12 12:26:00) [4]
> Товарисч, проведите эксперимент на досуге,вставте в пдф
> файл вотермарку откройте любым редактором и измените количество
> "букафф" в вотермарке на произвольное - вы будете удивлены,
> но целостность структуры сохраняется.
если вставить марку акробатом а потом заменить ее текст в гексредакторе то да она изменица и откроется
но как я понял твоя цель не менять а добавлять марку, а для этого надо знать формат файла,куда и что можно вставлять
если же марка уже стоит в документе и тебе ее надо изменить,а в итоге несрост-проблема в твоем коде
Lowlander (2010-03-12 10:39:00) [5]
> И где там упоминается акробат, кроме как в комментарии?
пардон, не ту процедуру вставил
> по ходу видно,что афтар вообще понятия не имеет о спецификации
> файла и открывает его тупо как текст
> и уш темболее не в курсе, что целостность любый вменяемых
> форматов проверяется контрольными суммами
> которые при тупом изменении букафф,естесственно не будут
> несовпадать
>
>
Товарисч, проведите эксперимент на досуге,вставте в пдф файл вотермарку откройте любым редактором и измените количество "букафф" в вотермарке на произвольное - вы будете удивлены, но целостность структуры сохраняется.
QAZ (2010-03-12 10:11:00) [6]по ходу видно,что афтар вообще понятия не имеет о спецификации файла и открывает его тупо как текст
и уш темболее не в курсе, что целостность любый вменяемых форматов проверяется контрольными суммами
которые при тупом изменении букафф,естесственно не будут несовпадать
абизяна (2010-03-10 17:10:00) [7]Попробуйте этот компонент: http://codingrus.ru/infusions/pro_download_panel/download.php?did=356
Я его не тестировал, но демо смотрел - вроде бы может редактировать и сохранять в файл, но поддерживает не все функции PDF.
Плохиш (2010-03-10 13:28:00) [8]
> Lowlander © (10.03.10 11:41) [10]
>
> Вот таким образом я передаю в акробат текст ватермарки
И где там упоминается акробат, кроме как в комментарии?
Какой смысл в этих манипуляциях, кроме как выкидывания первого символа в собранной строке и записывания получившегося в итоге мусора в файл?
brother (2010-03-10 11:57:00) [9]У, все, я пас...
Lowlander (2010-03-10 11:41:00) [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\
Anatoly Podgoretsky (2010-03-10 11:19:00) [11]> Lowlander (10.03.2010 10:36:06) [6]
У тебя ошибка в программе.
Anatoly Podgoretsky (2010-03-10 11:13:00) [12]> Lowlander (10.03.2010 10:07:03) [3]
Acrobat это СОМ сервер, поэтому кликать ничего не надо, он хорошо подается автоматизации.
Плохиш (2010-03-10 11:11:00) [13]
> Действую просто - потоком копирую из пдф в текстовый(структура
> копируется вместе с текстом), там ищу строку и заменяю ее(тоже
> все нормально)
Изменять надо побайтно, чтобы длина потока/строки не изменилась.
Lowlander (2010-03-10 10:36:00) [14]Просто хоть предложите какой нибудь другой подход или подскажите что я упускаю, почему сохраняемый пдф теряет структуру и текст..
Lowlander (2010-03-10 10:20:00) [15]Действую просто - потоком копирую из пдф в текстовый(структура копируется вместе с текстом), там ищу строку и заменяю ее(тоже все нормально), сохраняю в пдф(а тут уже все плохо..) - файлы после это не открываются с ошибкой - нарушена структура файла. Если открывать напрямую пдф - читает только часть файла..
brother (2010-03-10 10:13:00) [16]1. PDF это формат, значит, эли ты знаешь все о его структкре и можещь ее читать, то что мешает сохранить в pdf?
2. а теперь подробненько: как считываешь структуру файла, куда, как изменяешь? что значит:
> не хочет сохранятся как pdf
и с чего ты взял это:
> не записывает элементы структуры самого документа
в общем больше вопросов...
Lowlander (2010-03-10 10:07:00) [17]
> Делай это акробатом и не изобретай суперпупервелосипедища.
> ..
Весь смысл что я могу добавлять ватермарку через структуру, но еще у пдф есть такое свойство как printstate и его мне тоже нужно изменять. Через акробат просто нереально, т.к. таких документов бывает по 50-600 штук внушительных размеров и подкачиваются они из локалки, и если делать это вручную, то будешь этим заниматься сутками, уже пробывал, на 50 документов уходит около 1,5 часов бездумного кликанья в акробате
> Ну если уже редактировать получается, то дальше всё просто:
> нужно установить драйвер для печати в PDF и далее, просто,
> печатать в PDF файл.
Тоже не вариант, так как я вношу изменения не в текст документа, а в его структуру - ватермарку и печать документа, соответственно если буду печатать в пдф напрямую, необходимые мне изменения просто не сохранятся
абизяна (2010-03-09 16:51:00) [18]Ну если уже редактировать получается, то дальше всё просто: нужно установить драйвер для печати в PDF и далее, просто, печатать в PDF файл.
oldman (2010-03-09 16:29:00) [19]Делай это акробатом и не изобретай суперпупервелосипедища...