PdfStream getFormXObject() throws IOException {
   PdfStream s = new PdfStream(content.toByteArray());
   s.put(PdfName.TYPE, PdfName.XOBJECT);
   s.put(PdfName.SUBTYPE, PdfName.PS);
   s.flateCompress();
   return s;
 }
Beispiel #2
0
 public void alterContents() throws IOException {
   if (over == null && under == null) return;
   PdfArray ar = null;
   PdfObject content = PdfReader.getPdfObject(pageN.get(PdfName.CONTENTS), pageN);
   if (content == null) {
     ar = new PdfArray();
     pageN.put(PdfName.CONTENTS, ar);
   } else if (content.isArray()) {
     ar = (PdfArray) content;
   } else if (content.isStream()) {
     ar = new PdfArray();
     ar.add(pageN.get(PdfName.CONTENTS));
     pageN.put(PdfName.CONTENTS, ar);
   } else {
     ar = new PdfArray();
     pageN.put(PdfName.CONTENTS, ar);
   }
   ByteBuffer out = new ByteBuffer();
   if (under != null) {
     out.append(PdfContents.SAVESTATE);
     applyRotation(pageN, out);
     out.append(under.getInternalBuffer());
     out.append(PdfContents.RESTORESTATE);
   }
   if (over != null) out.append(PdfContents.SAVESTATE);
   PdfStream stream = new PdfStream(out.toByteArray());
   stream.flateCompress(cstp.getCompressionLevel());
   PdfIndirectReference ref1 = cstp.addToBody(stream).getIndirectReference();
   ar.addFirst(ref1);
   out.reset();
   if (over != null) {
     out.append(' ');
     out.append(PdfContents.RESTORESTATE);
     out.append(PdfContents.SAVESTATE);
     applyRotation(pageN, out);
     out.append(over.getInternalBuffer());
     out.append(PdfContents.RESTORESTATE);
     stream = new PdfStream(out.toByteArray());
     stream.flateCompress(cstp.getCompressionLevel());
     ar.add(cstp.addToBody(stream).getIndirectReference());
   }
   pageN.put(PdfName.RESOURCES, pageResources.getResources());
 }
Beispiel #3
0
 /**
  * Creates a ToUnicode CMap to allow copy and paste from Acrobat.
  *
  * @param metrics metrics[0] contains the glyph index and metrics[2] contains the Unicode code
  * @return the stream representing this CMap or <CODE>null</CODE>
  */
 public PdfStream getToUnicode(Object metrics[]) {
   if (metrics.length == 0) return null;
   StringBuffer buf =
       new StringBuffer(
           "/CIDInit /ProcSet findresource begin\n"
               + "12 dict begin\n"
               + "begincmap\n"
               + "/CIDSystemInfo\n"
               + "<< /Registry (TTX+0)\n"
               + "/Ordering (T42UV)\n"
               + "/Supplement 0\n"
               + ">> def\n"
               + "/CMapName /TTX+0 def\n"
               + "/CMapType 2 def\n"
               + "1 begincodespacerange\n"
               + "<0000><FFFF>\n"
               + "endcodespacerange\n");
   int size = 0;
   for (int k = 0; k < metrics.length; ++k) {
     if (size == 0) {
       if (k != 0) {
         buf.append("endbfrange\n");
       }
       size = Math.min(100, metrics.length - k);
       buf.append(size).append(" beginbfrange\n");
     }
     --size;
     int metric[] = (int[]) metrics[k];
     String fromTo = toHex(metric[0]);
     buf.append(fromTo).append(fromTo).append(toHex(metric[2])).append('\n');
   }
   buf.append(
       "endbfrange\n"
           + "endcmap\n"
           + "CMapName currentdict /CMap defineresource pop\n"
           + "end end\n");
   String s = buf.toString();
   PdfStream stream = new PdfStream(PdfEncodings.convertToBytes(s, null));
   stream.flateCompress(compressionLevel);
   return stream;
 }
Beispiel #4
0
 /**
  * Creates a JavaScript action. If the JavaScript is smaller than 50 characters it will be placed
  * as a string, otherwise it will be placed as a compressed stream.
  *
  * @param code the JavaScript code
  * @param writer the writer for this action
  * @param unicode select JavaScript unicode. Note that the internal Acrobat JavaScript engine does
  *     not support unicode, so this may or may not work for you
  * @return the JavaScript action
  */
 public static PdfAction javaScript(String code, PdfWriter writer, boolean unicode) {
   PdfAction js = new PdfAction();
   js.put(PdfName.S, PdfName.JAVASCRIPT);
   if (unicode && code.length() < 50) {
     js.put(PdfName.JS, new PdfString(code, PdfObject.TEXT_UNICODE));
   } else if (!unicode && code.length() < 100) {
     js.put(PdfName.JS, new PdfString(code));
   } else {
     try {
       byte b[] =
           PdfEncodings.convertToBytes(
               code, unicode ? PdfObject.TEXT_UNICODE : PdfObject.TEXT_PDFDOCENCODING);
       PdfStream stream = new PdfStream(b);
       stream.flateCompress(writer.getCompressionLevel());
       js.put(PdfName.JS, writer.addToBody(stream).getIndirectReference());
     } catch (Exception e) {
       js.put(PdfName.JS, new PdfString(code));
     }
   }
   return js;
 }