Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с изменением 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]

Делай это акробатом и не изобретай суперпупервелосипедища...


Наверх

Титульная страница Поиск, карта сайта Написать письмо