[
https://issues.apache.org/jira/browse/PDFBOX-3216?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15118363#comment-15118363
]
Sumit Jha commented on PDFBOX-3216:
-----------------------------------
One other approach I tried without converting to image has below sample code.
But with this approach I faced these problems as I told that source PDFs are
different formats:
1. Converts some PDF to Bad PDF (error message while opening PDF using acrobat
reader)
2. Converts some PDF to Blank PDF
{code}
package test;
import java.awt.geom.AffineTransform;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import org.apache.pdfbox.io.IOUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.common.PDStream;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectForm;
public class TestPDFBoxPOC {
public TestPDFBoxPOC() {
}
/**
* @param args
*/
public static void main(String[] args) {
File input = null;
PDDocument pd = null;
List pdAllPages = null;
PDDocument pdNew = null;
try {
input = new
File("C:\\workspaceRAD85_PDFBox_POC\\615667.pdf");
pd = PDDocument.load(input);
pdAllPages = pd.getDocumentCatalog().getAllPages();
PDPage page = null;
PDRectangle pageCropRectangle = null;
float pageWidth;
float pageHeight;
float scalePageX;
float scalePageY;
PDXObjectForm xobject = null;
pdNew = new PDDocument();
PDPage pageNew = null;
AffineTransform transform = null;
PDPageContentStream content = null;
for (int i = 0; i < pdAllPages.size(); i++) {
page = (PDPage) pdAllPages.get(i);
pageCropRectangle = page.getCropBox();
if(pageCropRectangle != null){
pageWidth =
pageCropRectangle.getWidth();
pageHeight =
pageCropRectangle.getHeight();
// Considering max PDF width to 650 and
height to 750
scalePageX = 650 / pageWidth;
scalePageY = 750 / pageHeight;
} else {
System.out.println("pageCropRectangle
is null");
scalePageX = 1;
scalePageY = 0.90f;
}
xobject = importAsXObject(pd, page);
pageNew = new PDPage();
pageNew.setResources(new PDResources());
pdNew.addPage(pageNew);
transform = new AffineTransform();
transform.setToScale(scalePageX, scalePageY);
content = new PDPageContentStream(pdNew,
pageNew);
content.drawXObject(xobject, transform);
content.close();
}
if (pdNew != null) {
pdNew.save("C:\\workspaceRAD85_PDFBox_POC\\615667_Converted.pdf");
pdNew.close();
}
if (pd != null) {
pd.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static PDXObjectForm importAsXObject(PDDocument target, PDPage
page)
throws IOException {
final InputStream is = page.getContents().createInputStream();
if (is != null) {
final PDXObjectForm xobject = new PDXObjectForm(
new PDStream(target));
OutputStream os =
xobject.getPDStream().createOutputStream();
try {
IOUtils.copy(is, os);
} finally {
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(os);
}
xobject.setResources(page.getResources());
xobject.setBBox(page.getCropBox());
return xobject;
}
return null;
}
}
{code}
> Problems containing certain fonts
> ---------------------------------
>
> Key: PDFBOX-3216
> URL: https://issues.apache.org/jira/browse/PDFBOX-3216
> Project: PDFBox
> Issue Type: Bug
> Components: Writing
> Affects Versions: 1.8.10
> Environment: Windows 7, JAVA 1.7
> Reporter: Sumit Jha
> Priority: Minor
>
> We are trying to take a PDF file as input to a process, shrink the pages to
> 90% of their original size, add a barcode at the top of each page, and then
> create a new PDF file with the altered content.
> We tried using the PDFBOX version 1.8.10. Sample code is below:
> {code}
> package test;
> import java.awt.image.BufferedImage;
> import java.io.File;
> import java.io.FileInputStream;
> import java.util.List;
> import javax.imageio.ImageIO;
> import org.apache.pdfbox.pdmodel.PDDocument;
> import org.apache.pdfbox.pdmodel.PDPage;
> import org.apache.pdfbox.pdmodel.common.PDRectangle;
> import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
> import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
> import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
> public class TestPDFBox2 {
> public TestPDFBox2() {
> // TODO Auto-generated constructor stub
> }
> /**
> * @param args
> */
> public static void main(String[] args) {
> // TODO Auto-generated method stub
>
> try{
>
> File input = new
> File("C:\\workspaceRAD85_PDFBox_POC\\607018.pdf");
>
> PDDocument pd = PDDocument.load(input);
> List pdAllPages = pd.getDocumentCatalog().getAllPages();
>
> PDPage page1 = (PDPage)pdAllPages.get(0);
> BufferedImage image1 = page1.convertToImage();
> ImageIO.write(image1, "jpg", new
> File("C:\\workspaceRAD85_PDFBox_POC\\image_607018_11.jpg"));
>
> PDPage page2 = (PDPage)pdAllPages.get(1);
> BufferedImage image2 = page2.convertToImage();
> ImageIO.write(image2, "jpg", new
> File("C:\\workspaceRAD85_PDFBox_POC\\image_607018_21.jpg"));
>
> pd.close();
>
> PDDocument pdNew = new PDDocument();
>
> PDPage pageNew = new PDPage();
> pdNew.addPage(pageNew);
>
> PDXObjectImage image = null;
> image = new PDJpeg(pdNew, new
> FileInputStream("C:\\workspaceRAD85_PDFBox_POC\\image_607018_11.jpg"));
>
> PDPageContentStream content = new PDPageContentStream(pdNew,
> pageNew);
> //content.drawImage(image, 0, 0);
> content.drawXObject(image, 0, 0, 600, 700);
> content.close();
>
> PDPage pageNew2 = new PDPage();
> pdNew.addPage(pageNew2);
>
> PDXObjectImage image0 = null;
> image0 = new PDJpeg(pdNew, new
> FileInputStream("C:\\workspaceRAD85_PDFBox_POC\\image_607018_21.jpg"));
>
> PDPageContentStream content0 = new PDPageContentStream(pdNew,
> pageNew2);
> //content.drawImage(image, 0, 0);
> content0.drawXObject(image0, 0, 0, 600, 700);
> content0.close();
>
>
> pdNew.save("C:\\workspaceRAD85_PDFBox_POC\\Image_To_PDF_607018_1.pdf");
> pdNew.close();
>
>
>
> /*PDRectangle rect = page1.getMediaBox();
> float upperRightY = rect.getUpperRightY();
> rect.setUpperRightY(upperRightY*(0.70f));
> page1.setMediaBox(rect);
>
> pd.save("C:\\workspaceRAD85_PDFBox_POC\\shrink.pdf");*/
>
>
>
>
> }catch (Exception e) {
>
> }
> }
> }
> {code}
> We are seeing that there are few problems while converting few PDFs:
> 1. In some source PDFs bullet point listed is changed to some different icon
> in converted PDF.
> 2. In some PDFs when there is a bullet point in the source document the text
> on the line following the bullet point is destroyed/missing characters.
> We’ve read some posts that we should try using the PDFBOX version 2.1.10, but
> that is not an approved version at our company and it is not released too.
> I should also note that the source PDF documents we are trying to add the Bar
> Codes to are quite varied- they can come in any size, using any font, with
> images, and be oriented portrait or landscape. The goal is to get these
> printed on 8.5 by 11 inch paper with a barcode on them at top.
> Do you have any suggestions on how to proceed?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]