You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2017/11/08 20:01:56 UTC
svn commit: r1814634 -
/pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowTextWithPositioning.java
Author: tilman
Date: Wed Nov 8 20:01:56 2017
New Revision: 1814634
URL: http://svn.apache.org/viewvc?rev=1814634&view=rev
Log:
PDFBOX-3992: example of show text with positioning by Dan Fickling
Added:
pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowTextWithPositioning.java (with props)
Added: pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowTextWithPositioning.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowTextWithPositioning.java?rev=1814634&view=auto
==============================================================================
--- pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowTextWithPositioning.java (added)
+++ pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowTextWithPositioning.java Wed Nov 8 20:01:56 2017
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2017 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.examples.pdmodel;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDType0Font;
+import org.apache.pdfbox.util.Matrix;
+
+/**
+ * This example shows how to justify a string using the showTextWithPositioning method. First only
+ * spaces are adjusted, and then every letter.
+ *
+ * @author Dan Fickling
+ */
+public class ShowTextWithPositioning
+{
+ public static void main(String[] args) throws Exception
+ {
+ doIt("Hello World, this is a test!", "justify-example.pdf");
+ }
+
+ public static void doIt(String message, String outfile) throws Exception
+ {
+ // the document
+ PDDocument doc = new PDDocument();
+ InputStream is = PDDocument.class.getResourceAsStream("/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf");
+ final float FONT_SIZE = 20.0f;
+
+ // Page 1
+ PDFont font = PDType0Font.load(doc, is, true);
+ //PDFont font = PDType1Font.COURIER;
+ PDPage page = new PDPage(PDRectangle.A4);
+ doc.addPage(page);
+
+ // Get the non-justified string width in text space units.
+ float stringWidth = font.getStringWidth(message) * FONT_SIZE;
+
+ // Get the string height in text space units.
+ float stringHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() * FONT_SIZE;
+
+ // Get the width we have to justify in.
+ PDRectangle pageSize = page.getMediaBox();
+
+ PDPageContentStream contentStream = new PDPageContentStream(doc,
+ page, AppendMode.OVERWRITE, false);
+
+ contentStream.beginText();
+ contentStream.setFont(font, FONT_SIZE);
+
+ // Start at top of page.
+ contentStream.setTextMatrix(
+ Matrix.getTranslateInstance(0, pageSize.getHeight() - stringHeight / 1000f));
+
+ // First show non-justified.
+ contentStream.showText(message);
+
+ // Move to next line.
+ contentStream.setTextMatrix(
+ Matrix.getTranslateInstance(0, pageSize.getHeight() - ((stringHeight / 1000f) * 2)));
+
+ // Now show word justified.
+ // The space we have to make up, in text space units.
+ float justifyWidth = ((pageSize.getWidth() * 1000f) - (stringWidth));
+
+ List<Object> text = new ArrayList<Object>();
+ String[] parts = message.split("\\s");
+
+ float spaceWidth = (justifyWidth / (parts.length - 1)) / FONT_SIZE;
+
+ for (int i = 0; i < parts.length; i++)
+ {
+ if (i != 0)
+ {
+ text.add(" ");
+ // Positive values move to the left, negative to the right.
+ text.add(-spaceWidth);
+ }
+ text.add(parts[i]);
+ }
+ contentStream.showTextWithPositioning(text.toArray());
+ contentStream.setTextMatrix(Matrix.getTranslateInstance(0, pageSize.getHeight() - ((stringHeight / 1000f) * 3)));
+
+ // Now show letter justified.
+ text = new ArrayList<Object>();
+ justifyWidth = ((pageSize.getWidth() * 1000f) - stringWidth);
+ float extraLetterWidth = (justifyWidth / (message.codePointCount(0, message.length()) - 1)) / FONT_SIZE;
+
+ for (int i = 0; i < message.length();)
+ {
+ if (i != 0)
+ {
+ text.add(-extraLetterWidth);
+ }
+
+ text.add(String.valueOf(Character.toChars(message.codePointAt(i))));
+
+ i += Character.charCount(message.codePointAt(i));
+ }
+ contentStream.showTextWithPositioning(text.toArray());
+
+ // Finish up.
+ contentStream.endText();
+ contentStream.close();
+
+ doc.save(outfile);
+ doc.close();
+ }
+}
Propchange: pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowTextWithPositioning.java
------------------------------------------------------------------------------
svn:eol-style = native