PDF를 처음 생성 할 때 PDFBox를 사용하고 있습니다. 내 Java 프로그램에서 생성 된 약 40 개의 객관식 질문으로 구성된 텍스트 문서가 있습니다. 질문 중 일부는 질문 위에 삽입해야하는 작은 이미지와 관련이 있습니다. 이러한 이유로 텍스트 문서를 PDF로 변환하고 이미지를 삽입하려고합니다.PDFBox 이미지를 텍스트 인라인으로 삽입
이미지를 PDF 문서에 삽입 할 수 있었지만 배경처럼 텍스트가 언더 레이로 표시되었습니다. 텍스트와 함께 이미지를 배치하려고합니다 (단어 형식 텍스트 상자 인라인처럼). 삽입 이미지 클래스는 텍스트의 위치에 따라 절대 위치가 필요합니다.
이미지를 어디에서 그릴 수 있습니까? 이미지 위에 기록 된 텍스트 정보 PDFBox에 대한
이 2.0.7.jar
import ExamDatabase.ReadInputFile;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.font.PDFontFactory;//???look up
import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
import org.apache.pdfbox.pdmodel.font.PDType3Font;
import org.apache.pdfbox.pdmodel.font.PDSimpleFont;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDInlineImage;
/**
*
* @author Steve carr
*/
public class HelloWorldPdf1_1_1
{
//runs
/**
* @param args the command line arguments
* @throws java.io.IOException
*/
public static void main(String[] args) throws IOException
{
ReadInputFile fileI = new ReadInputFile();// read plain text file text file
ArrayList<String> localList = fileI.readerNew();
// Create a document and add a page to it
try (PDDocument document = new PDDocument())
{
PDPage page = new PDPage();
document.addPage(page);
// Create a new font1 object selecting one of the PDF base fonts
PDFont font1 = PDType1Font.HELVETICA;//TIMES_ROMAN;
PDFont font2 = PDType1Font.TIMES_ROMAN;
PDFont font3 = PDType1Font.COURIER_BOLD;
try (PDPageContentStream contentStream = new PDPageContentStream(document, page))
{
//Creating PDImageXObject object
PDImageXObject pdImage = PDImageXObject.createFromFile("C:/PdfBox_Examples/CARD00.GIF", document);
//**creating the PDPageContentStream object
//PDPageContentStream contents = new PDPageContentStream(document, page);
//**Drawing the image in the PDF document
contentStream.drawImage(pdImage, 100, 500, 50, 70);//1ST number is horizontal posn from left
//****TEXTTEXTTEXTTEXT
// Define a text content stream using the selected font1, moving the cursor and drawing the text "Hello World"
contentStream.beginText();
contentStream.setFont(font1, 11);
contentStream.newLineAtOffset(0, 0);
contentStream.setCharacterSpacing(0);
contentStream.setWordSpacing(0);
contentStream.setLeading(0);
contentStream.setLeading(14.5f);// this was key for some reason
contentStream.moveTextPositionByAmount(100, 700);// sets the start point of text
System.out.println("localList.size= " + localList.size());//just checking within bounds during testing
String line;
int i;
for (i = 0; i < 138; ++i)
{
System.out.println(localList.get(i));
line = localList.get(i);
contentStream.drawString(line);
contentStream.newLine();
}
contentStream.endText();
//******************************************************
// Make sure that the content stream is closed:
contentStream.close();
}
// Save the results and ensure that the document is properly closed:
document.save("Hello World.pdf");
}
}
}
결과 출력 :
당신이 시도 것으로 보인다 – Maxim
조금 서식 개선 다른 계정을 사용하여 코드를 추가하십시오. 코드를 추가하려면 질문을 만든 계정을 사용하고 질문 [] (https://stackoverflow.com/posts/46848230/edit)을 사용하십시오. – mkl
'contentStream.newLine();'을 호출 할 때 선행 값은 수직 이동을 설정합니다. 따라서 이미지를 그릴 때 적절한 값을 사용하십시오. 따라서 초기 값 (예 : 700)에서 필요한 시간 (14.5)을 빼고 drawImage에 사용하십시오. –