У меня есть существующие PDF-файлы, к которым мне нужно динамически добавлять изображение / изображения. Изображение приходит из файла загрузки. Как только у меня будет загруженный файл, как можно указать, куда поместить изображение в PDF. Один фрагмент кода, который я нашел, не работает правильно. Это должно работать для PDF-файлов с любым количеством страниц. Насколько я понимаю, абсолютное позиционирование задается в нижнем левом углу последней страницы PDF. Если мне нужно, чтобы изображение отображалось в 30 пикселях сверху и в 50 пикселях слева от страницы 1, как мне это сделать? Или, если мне нужно отобразить изображение 50 пикселей сверху / 100 пикселей слева на странице 2?
Я пытался использовать код, найденный на http://rip747.wordpress.com/2009/03/26/add-an-image-dynamically-to-a-pdf-with-cf-and-itext/. Я изменил его для своих нужд ниже:
<cfscript>
myLeft = 30;
myTop = 50;
myPageNum = 1;
// output buffer to write PDF
fileIO = createObject("java","java.io.FileOutputStream").init(myOutputPath);
// reader to read our PDF
reader = createObject("java","com.lowagie.text.pdf.PdfReader").init(mySourcePath);
// stamper so we can modify our existing PDF
stamper = createObject("java","com.lowagie.text.pdf.PdfStamper").init(reader, fileIO);
// get the content of our existing PDF
content = stamper.getOverContent(reader.getNumberOfPages());
// create an image object so we can add our dynamic image to our PDF
image = createobject("java", "com.lowagie.text.Image");
// initalize our image
img = image.getInstance(imgPath);
x = (reader.getPageSize(1).width() - img.scaledWidth()) - myLeft;
y = (reader.getPageSize(1).height() - img.scaledHeight()) - myTop;
// now we assign the position to our image
img.setAbsolutePosition(javacast("float", x), javacast("float", y));
// add our image to the existing PDF
content.addImage(img);
// flattern our form so our values show
stamper.setFormFlattening(true);
// close the stamper and output our new PDF
stamper.close();
// close the reader
reader.close();
</cfscript>
Приведенный выше код помещает мое изображение в верхнем правом углу страницы 2 - 50 пикселей сверху / 30 пикселей слева.
Я знаю, что я близок ... просто нужна небольшая помощь, чтобы прибить это для моих нужд.
Я обновил свой код. Это приводит к тому, что изображение попадает в верхний левый угол страницы 2 - правильное расположение, но я хочу, чтобы оно было на странице 1:
x = myLeft;
y = (reader.getPageSize(1).height()) - img.scaledHeight() - myTop;
Я подумал, что, возможно, мне нужно было добавить высоту страницы 1, чтобы получить изображение до страницы 1, но изображение полностью исчезает, когда я пытаюсь воспользоваться одним из следующих параметров:
// I figure I'll need something like this to handle multi-page docs
y = (reader.getPageSize(1).height() * reader.getNumberOfPages()) - img.scaledHeight() - myTop;
y = reader.getPageSize(1).height() + reader.getPageSize(1).height() - img.scaledHeight() - myTop;