You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2016/06/20 16:23:51 UTC
svn commit: r1749360 -
/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/DetermineTextFitsField.java
Author: msahyoun
Date: Mon Jun 20 16:23:50 2016
New Revision: 1749360
URL: http://svn.apache.org/viewvc?rev=1749360&view=rev
Log:
PDFBOX-3389: add sample to determine if a text fits the width of a field
Added:
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/DetermineTextFitsField.java (with props)
Added: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/DetermineTextFitsField.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/DetermineTextFitsField.java?rev=1749360&view=auto
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/DetermineTextFitsField.java (added)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/DetermineTextFitsField.java Mon Jun 20 16:23:50 2016
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.interactive.form;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDResources;
+import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
+import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
+import org.apache.pdfbox.pdmodel.interactive.form.PDField;
+import org.apache.pdfbox.pdmodel.interactive.form.PDTextField;
+
+/**
+ * Determine if text length fits the field.
+ *
+ * This sample builds on the form generated by @link CreateSimpleForm so you need to run that first.
+ *
+ */
+public class DetermineTextFitsField
+{
+
+ public static void main(String[] args) throws IOException
+ {
+ // Load the PDF document created by SimpleForm.java
+ PDDocument document = PDDocument.load(new File("target/SimpleForm.pdf"));
+ PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm();
+
+ // Get the field and the widget associated to it.
+ // Note: there might be multiple widgets
+ PDField field = acroForm.getField("SampleField");
+ PDAnnotationWidget widget = field.getWidgets().get(0);
+
+ // Get the width of the fields box
+ float widthOfField = widget.getRectangle().getWidth();
+
+ // Get the font and the font size setting
+ // This is currently a little awkward and needs improvement to have a better API
+ // for that. In many cases the string will be built like that:
+ // /Helv 12 Tf 0 g
+ // We could use PDFStreamParser to do the parsing. For the sample we split the
+ // string.
+ String defaultAppearance = ((PDTextField) field).getDefaultAppearance();
+ String[] parts = defaultAppearance.split(" ");
+
+ // Get the font name
+ COSName fontName = COSName.getPDFName(parts[0].substring(1));
+ float fontSize = Float.parseFloat(parts[1]);
+
+ // Get the font resource.
+ // First look up the font from the widgets appearance stream.
+ // This will be the case if there is already a value.
+ // If the value hasn't been set yet the font resource needs to be looked up from
+ // the AcroForm default resources
+
+ PDFont font = null;
+ PDResources resources = null;
+
+ resources = widget.getNormalAppearanceStream().getResources();
+ if (resources != null)
+ {
+ font = resources.getFont(fontName);
+ }
+ if (font == null)
+ {
+ font = acroForm.getDefaultResources().getFont(fontName);
+ }
+
+ String willFit = "short string";
+ String willNotFit = "this is a very long string which will not fit the width of the widget";
+
+ // calculate the string width at a certain font size
+ float willFitWidth = font.getStringWidth(willFit) * fontSize / 1000;
+ float willNotFitWidth = font.getStringWidth(willNotFit) * fontSize / 1000;
+
+ assert willFitWidth < widthOfField;
+ assert willNotFitWidth > widthOfField;
+
+ document.close();
+ }
+
+}
Propchange: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/DetermineTextFitsField.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/DetermineTextFitsField.java
------------------------------------------------------------------------------
svn:mime-type = text/plain