Initial Commit
This commit is contained in:
230
iTechSharp/iTextSharp/text/pdf/intern/PdfAnnotationsImp.cs
Normal file
230
iTechSharp/iTextSharp/text/pdf/intern/PdfAnnotationsImp.cs
Normal file
@@ -0,0 +1,230 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using iTextSharp.text.pdf;
|
||||
using iTextSharp.text;
|
||||
/*
|
||||
* $Id: PdfAnnotationsImp.cs,v 1.1 2007/02/09 15:34:40 psoares33 Exp $
|
||||
*
|
||||
* Copyright 2006 Bruno Lowagie
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is 'iText, a free JAVA-PDF library'.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
|
||||
* the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
|
||||
* All Rights Reserved.
|
||||
* Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
|
||||
* are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): all the names of the contributors are added in the source code
|
||||
* where applicable.
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of the
|
||||
* LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
|
||||
* provisions of LGPL are applicable instead of those above. If you wish to
|
||||
* allow use of your version of this file only under the terms of the LGPL
|
||||
* License and not to allow others to use your version of this file under
|
||||
* the MPL, indicate your decision by deleting the provisions above and
|
||||
* replace them with the notice and other provisions required by the LGPL.
|
||||
* If you do not delete the provisions above, a recipient may use your version
|
||||
* of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the MPL as stated above or under the terms of the GNU
|
||||
* Library General Public License as published by the Free Software Foundation;
|
||||
* either version 2 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
|
||||
* details.
|
||||
*
|
||||
* If you didn't download this code from the following link, you should check if
|
||||
* you aren't using an obsolete version:
|
||||
* http://www.lowagie.com/iText/
|
||||
*/
|
||||
|
||||
namespace iTextSharp.text.pdf.intern {
|
||||
|
||||
public class PdfAnnotationsImp {
|
||||
|
||||
/**
|
||||
* This is the AcroForm object for the complete document.
|
||||
*/
|
||||
protected internal PdfAcroForm acroForm;
|
||||
|
||||
/**
|
||||
* This is the array containing the references to annotations
|
||||
* that were added to the document.
|
||||
*/
|
||||
protected internal ArrayList annotations;
|
||||
|
||||
/**
|
||||
* This is an array containg references to some delayed annotations
|
||||
* (that were added for a page that doesn't exist yet).
|
||||
*/
|
||||
protected internal ArrayList delayedAnnotations = new ArrayList();
|
||||
|
||||
|
||||
public PdfAnnotationsImp(PdfWriter writer) {
|
||||
acroForm = new PdfAcroForm(writer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the AcroForm is valid.
|
||||
*/
|
||||
public bool HasValidAcroForm() {
|
||||
return acroForm.IsValid();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the AcroForm object.
|
||||
* @return the PdfAcroform object of the PdfDocument
|
||||
*/
|
||||
public PdfAcroForm AcroForm {
|
||||
get {
|
||||
return acroForm;
|
||||
}
|
||||
}
|
||||
|
||||
public int SigFlags {
|
||||
set {
|
||||
acroForm.SigFlags = value;
|
||||
}
|
||||
}
|
||||
|
||||
public void AddCalculationOrder(PdfFormField formField) {
|
||||
acroForm.AddCalculationOrder(formField);
|
||||
}
|
||||
|
||||
public void AddAnnotation(PdfAnnotation annot) {
|
||||
if (annot.IsForm()) {
|
||||
PdfFormField field = (PdfFormField)annot;
|
||||
if (field.Parent == null)
|
||||
AddFormFieldRaw(field);
|
||||
}
|
||||
else
|
||||
annotations.Add(annot);
|
||||
}
|
||||
|
||||
public void AddPlainAnnotation(PdfAnnotation annot) {
|
||||
annotations.Add(annot);
|
||||
}
|
||||
|
||||
void AddFormFieldRaw(PdfFormField field) {
|
||||
annotations.Add(field);
|
||||
ArrayList kids = field.Kids;
|
||||
if (kids != null) {
|
||||
for (int k = 0; k < kids.Count; ++k)
|
||||
AddFormFieldRaw((PdfFormField)kids[k]);
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasUnusedAnnotations() {
|
||||
return annotations.Count > 0;
|
||||
}
|
||||
|
||||
public void ResetAnnotations() {
|
||||
annotations = delayedAnnotations;
|
||||
delayedAnnotations = new ArrayList();
|
||||
}
|
||||
|
||||
public PdfArray RotateAnnotations(PdfWriter writer, Rectangle pageSize) {
|
||||
PdfArray array = new PdfArray();
|
||||
int rotation = pageSize.Rotation % 360;
|
||||
int currentPage = writer.CurrentPageNumber;
|
||||
for (int k = 0; k < annotations.Count; ++k) {
|
||||
PdfAnnotation dic = (PdfAnnotation)annotations[k];
|
||||
int page = dic.PlaceInPage;
|
||||
if (page > currentPage) {
|
||||
delayedAnnotations.Add(dic);
|
||||
continue;
|
||||
}
|
||||
if (dic.IsForm()) {
|
||||
if (!dic.IsUsed()) {
|
||||
Hashtable templates = dic.Templates;
|
||||
if (templates != null)
|
||||
acroForm.AddFieldTemplates(templates);
|
||||
}
|
||||
PdfFormField field = (PdfFormField)dic;
|
||||
if (field.Parent == null)
|
||||
acroForm.AddDocumentField(field.IndirectReference);
|
||||
}
|
||||
if (dic.IsAnnotation()) {
|
||||
array.Add(dic.IndirectReference);
|
||||
if (!dic.IsUsed()) {
|
||||
PdfRectangle rect = (PdfRectangle)dic.Get(PdfName.RECT);
|
||||
if (rect != null) {
|
||||
switch (rotation) {
|
||||
case 90:
|
||||
dic.Put(PdfName.RECT, new PdfRectangle(
|
||||
pageSize.Top - rect.Bottom,
|
||||
rect.Left,
|
||||
pageSize.Top - rect.Top,
|
||||
rect.Right));
|
||||
break;
|
||||
case 180:
|
||||
dic.Put(PdfName.RECT, new PdfRectangle(
|
||||
pageSize.Right - rect.Left,
|
||||
pageSize.Top - rect.Bottom,
|
||||
pageSize.Right - rect.Right,
|
||||
pageSize.Top - rect.Top));
|
||||
break;
|
||||
case 270:
|
||||
dic.Put(PdfName.RECT, new PdfRectangle(
|
||||
rect.Bottom,
|
||||
pageSize.Right - rect.Left,
|
||||
rect.Top,
|
||||
pageSize.Right - rect.Right));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!dic.IsUsed()) {
|
||||
dic.SetUsed();
|
||||
writer.AddToBody(dic, dic.IndirectReference);
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
public static PdfAnnotation ConvertAnnotation(PdfWriter writer, Annotation annot, Rectangle defaultRect) {
|
||||
switch (annot.AnnotationType) {
|
||||
case Annotation.URL_NET:
|
||||
return new PdfAnnotation(writer, annot.GetLlx(), annot.GetLly(), annot.GetUrx(), annot.GetUry(), new PdfAction((Uri) annot.Attributes[Annotation.URL]));
|
||||
case Annotation.URL_AS_STRING:
|
||||
return new PdfAnnotation(writer, annot.GetLlx(), annot.GetLly(), annot.GetUrx(), annot.GetUry(), new PdfAction((String) annot.Attributes[Annotation.FILE]));
|
||||
case Annotation.FILE_DEST:
|
||||
return new PdfAnnotation(writer, annot.GetLlx(), annot.GetLly(), annot.GetUrx(), annot.GetUry(), new PdfAction((String) annot.Attributes[Annotation.FILE], (String) annot.Attributes[Annotation.DESTINATION]));
|
||||
case Annotation.SCREEN:
|
||||
bool[] sparams = (bool[])annot.Attributes[Annotation.PARAMETERS];
|
||||
String fname = (String) annot.Attributes[Annotation.FILE];
|
||||
String mimetype = (String) annot.Attributes[Annotation.MIMETYPE];
|
||||
PdfFileSpecification fs;
|
||||
if (sparams[0])
|
||||
fs = PdfFileSpecification.FileEmbedded(writer, fname, fname, null);
|
||||
else
|
||||
fs = PdfFileSpecification.FileExtern(writer, fname);
|
||||
PdfAnnotation ann = PdfAnnotation.CreateScreen(writer, new Rectangle(annot.GetLlx(), annot.GetLly(), annot.GetUrx(), annot.GetUry()),
|
||||
fname, fs, mimetype, sparams[1]);
|
||||
return ann;
|
||||
case Annotation.FILE_PAGE:
|
||||
return new PdfAnnotation(writer, annot.GetLlx(), annot.GetLly(), annot.GetUrx(), annot.GetUry(), new PdfAction((String) annot.Attributes[Annotation.FILE], (int)annot.Attributes[Annotation.PAGE]));
|
||||
case Annotation.NAMED_DEST:
|
||||
return new PdfAnnotation(writer, annot.GetLlx(), annot.GetLly(), annot.GetUrx(), annot.GetUry(), new PdfAction((int) annot.Attributes[Annotation.NAMED]));
|
||||
case Annotation.LAUNCH:
|
||||
return new PdfAnnotation(writer, annot.GetLlx(), annot.GetLly(), annot.GetUrx(), annot.GetUry(), new PdfAction((String) annot.Attributes[Annotation.APPLICATION],(String) annot.Attributes[Annotation.PARAMETERS],(String) annot.Attributes[Annotation.OPERATION],(String) annot.Attributes[Annotation.DEFAULTDIR]));
|
||||
default:
|
||||
return new PdfAnnotation(writer, defaultRect.Left, defaultRect.Bottom, defaultRect.Right, defaultRect.Top, new PdfString(annot.Title, PdfObject.TEXT_UNICODE), new PdfString(annot.Content, PdfObject.TEXT_UNICODE));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
172
iTechSharp/iTextSharp/text/pdf/intern/PdfVersionImp.cs
Normal file
172
iTechSharp/iTextSharp/text/pdf/intern/PdfVersionImp.cs
Normal file
@@ -0,0 +1,172 @@
|
||||
using System;
|
||||
using iTextSharp.text.pdf;
|
||||
using iTextSharp.text;
|
||||
using iTextSharp.text.pdf.interfaces;
|
||||
/*
|
||||
* $Id: PdfVersionImp.cs,v 1.1 2007/02/09 15:34:40 psoares33 Exp $
|
||||
*
|
||||
* Copyright 2006 Bruno Lowagie
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is 'iText, a free JAVA-PDF library'.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
|
||||
* the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
|
||||
* All Rights Reserved.
|
||||
* Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
|
||||
* are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): all the names of the contributors are added in the source code
|
||||
* where applicable.
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of the
|
||||
* LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
|
||||
* provisions of LGPL are applicable instead of those above. If you wish to
|
||||
* allow use of your version of this file only under the terms of the LGPL
|
||||
* License and not to allow others to use your version of this file under
|
||||
* the MPL, indicate your decision by deleting the provisions above and
|
||||
* replace them with the notice and other provisions required by the LGPL.
|
||||
* If you do not delete the provisions above, a recipient may use your version
|
||||
* of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the MPL as stated above or under the terms of the GNU
|
||||
* Library General Public License as published by the Free Software Foundation;
|
||||
* either version 2 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
|
||||
* details.
|
||||
*
|
||||
* If you didn't download this code from the following link, you should check if
|
||||
* you aren't using an obsolete version:
|
||||
* http://www.lowagie.com/iText/
|
||||
*/
|
||||
|
||||
namespace iTextSharp.text.pdf.intern {
|
||||
|
||||
/**
|
||||
* Stores the PDF version information,
|
||||
* knows how to write a PDF Header,
|
||||
* and how to add the version to the catalog (if necessary).
|
||||
*/
|
||||
|
||||
public class PdfVersionImp : IPdfVersion {
|
||||
|
||||
/** Contains different strings that are part of the header. */
|
||||
public static readonly byte[][] HEADER = {
|
||||
DocWriter.GetISOBytes("\n"),
|
||||
DocWriter.GetISOBytes("%PDF-"),
|
||||
DocWriter.GetISOBytes("\n%\u00e2\u00e3\u00cf\u00d3\n")
|
||||
};
|
||||
/** Indicates if the header was already written. */
|
||||
protected bool headerWasWritten = false;
|
||||
/** Indicates if we are working in append mode. */
|
||||
protected bool appendmode = false;
|
||||
/** The version that was or will be written to the header. */
|
||||
protected char header_version = PdfWriter.VERSION_1_4;
|
||||
/** The version that will be written to the catalog. */
|
||||
protected PdfName catalog_version = null;
|
||||
|
||||
/**
|
||||
* @see com.lowagie.text.pdf.interfaces.PdfVersion#setPdfVersion(char)
|
||||
*/
|
||||
public char PdfVersion {
|
||||
set {
|
||||
if (headerWasWritten || appendmode) {
|
||||
SetPdfVersion(GetVersionAsName(value));
|
||||
}
|
||||
else {
|
||||
this.header_version = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see com.lowagie.text.pdf.interfaces.PdfVersion#setAtLeastPdfVersion(char)
|
||||
*/
|
||||
public void SetAtLeastPdfVersion(char version) {
|
||||
if (version > header_version) {
|
||||
PdfVersion = version;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see com.lowagie.text.pdf.interfaces.PdfVersion#setPdfVersion(com.lowagie.text.pdf.PdfName)
|
||||
*/
|
||||
public void SetPdfVersion(PdfName version) {
|
||||
if (catalog_version == null || catalog_version.CompareTo(version) < 0) {
|
||||
this.catalog_version = version;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the append mode.
|
||||
*/
|
||||
public void SetAppendmode(bool appendmode) {
|
||||
this.appendmode = appendmode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes the header to the OutputStreamCounter.
|
||||
* @throws IOException
|
||||
*/
|
||||
public void WriteHeader(OutputStreamCounter os) {
|
||||
if (appendmode) {
|
||||
os.Write(HEADER[0], 0, HEADER[0].Length);
|
||||
}
|
||||
else {
|
||||
os.Write(HEADER[1], 0, HEADER[1].Length);
|
||||
os.Write(GetVersionAsByteArray(header_version), 0, GetVersionAsByteArray(header_version).Length);
|
||||
os.Write(HEADER[2], 0, HEADER[2].Length);
|
||||
headerWasWritten = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the PDF version as a name.
|
||||
* @param version the version character.
|
||||
*/
|
||||
public PdfName GetVersionAsName(char version) {
|
||||
switch (version) {
|
||||
case PdfWriter.VERSION_1_2:
|
||||
return PdfWriter.PDF_VERSION_1_2;
|
||||
case PdfWriter.VERSION_1_3:
|
||||
return PdfWriter.PDF_VERSION_1_3;
|
||||
case PdfWriter.VERSION_1_4:
|
||||
return PdfWriter.PDF_VERSION_1_4;
|
||||
case PdfWriter.VERSION_1_5:
|
||||
return PdfWriter.PDF_VERSION_1_5;
|
||||
case PdfWriter.VERSION_1_6:
|
||||
return PdfWriter.PDF_VERSION_1_6;
|
||||
case PdfWriter.VERSION_1_7:
|
||||
return PdfWriter.PDF_VERSION_1_7;
|
||||
default:
|
||||
return PdfWriter.PDF_VERSION_1_4;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the version as a byte[].
|
||||
* @param version the version character
|
||||
*/
|
||||
public byte[] GetVersionAsByteArray(char version) {
|
||||
return DocWriter.GetISOBytes(GetVersionAsName(version).ToString().Substring(1));
|
||||
}
|
||||
|
||||
/** Adds the version to the Catalog dictionary. */
|
||||
public void AddToCatalog(PdfDictionary catalog) {
|
||||
if(catalog_version != null) {
|
||||
catalog.Put(PdfName.VERSION, catalog_version);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
359
iTechSharp/iTextSharp/text/pdf/intern/PdfViewerPreferencesImp.cs
Normal file
359
iTechSharp/iTextSharp/text/pdf/intern/PdfViewerPreferencesImp.cs
Normal file
@@ -0,0 +1,359 @@
|
||||
using System;
|
||||
using iTextSharp.text.pdf;
|
||||
using iTextSharp.text.pdf.interfaces;
|
||||
|
||||
/*
|
||||
* $Id: PdfViewerPreferencesImp.cs,v 1.7 2008/05/04 10:49:46 psoares33 Exp $
|
||||
*
|
||||
* Copyright 2006 Bruno Lowagie
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is 'iText, a free JAVA-PDF library'.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
|
||||
* the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
|
||||
* All Rights Reserved.
|
||||
* Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
|
||||
* are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): all the names of the contributors are added in the source code
|
||||
* where applicable.
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of the
|
||||
* LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
|
||||
* provisions of LGPL are applicable instead of those above. If you wish to
|
||||
* allow use of your version of this file only under the terms of the LGPL
|
||||
* License and not to allow others to use your version of this file under
|
||||
* the MPL, indicate your decision by deleting the provisions above and
|
||||
* replace them with the notice and other provisions required by the LGPL.
|
||||
* If you do not delete the provisions above, a recipient may use your version
|
||||
* of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the MPL as stated above or under the terms of the GNU
|
||||
* Library General Public License as published by the Free Software Foundation;
|
||||
* either version 2 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
|
||||
* details.
|
||||
*
|
||||
* If you didn't download this code from the following link, you should check if
|
||||
* you aren't using an obsolete version:
|
||||
* http://www.lowagie.com/iText/
|
||||
*/
|
||||
|
||||
namespace iTextSharp.text.pdf.intern {
|
||||
|
||||
/**
|
||||
* Stores the information concerning viewer preferences,
|
||||
* and contains the business logic that allows you to set viewer preferences.
|
||||
*/
|
||||
public class PdfViewerPreferencesImp : IPdfViewerPreferences {
|
||||
|
||||
public static readonly PdfName[] VIEWER_PREFERENCES = {
|
||||
PdfName.HIDETOOLBAR, // 0
|
||||
PdfName.HIDEMENUBAR, // 1
|
||||
PdfName.HIDEWINDOWUI, // 2
|
||||
PdfName.FITWINDOW, // 3
|
||||
PdfName.CENTERWINDOW, // 4
|
||||
PdfName.DISPLAYDOCTITLE, // 5
|
||||
PdfName.NONFULLSCREENPAGEMODE, // 6
|
||||
PdfName.DIRECTION, // 7
|
||||
PdfName.VIEWAREA, // 8
|
||||
PdfName.VIEWCLIP, // 9
|
||||
PdfName.PRINTAREA, // 10
|
||||
PdfName.PRINTCLIP, // 11
|
||||
PdfName.PRINTSCALING, // 12
|
||||
PdfName.DUPLEX, // 13
|
||||
PdfName.PICKTRAYBYPDFSIZE, // 14
|
||||
PdfName.PRINTPAGERANGE, // 15
|
||||
PdfName.NUMCOPIES // 16
|
||||
};
|
||||
|
||||
|
||||
/** A series of viewer preferences. */
|
||||
public static readonly PdfName[] NONFULLSCREENPAGEMODE_PREFERENCES = {
|
||||
PdfName.USENONE, PdfName.USEOUTLINES, PdfName.USETHUMBS, PdfName.USEOC
|
||||
};
|
||||
/** A series of viewer preferences. */
|
||||
public static readonly PdfName[] DIRECTION_PREFERENCES = {
|
||||
PdfName.L2R, PdfName.R2L
|
||||
};
|
||||
/** A series of viewer preferences. */
|
||||
public static readonly PdfName[] PAGE_BOUNDARIES = {
|
||||
PdfName.MEDIABOX, PdfName.CROPBOX, PdfName.BLEEDBOX, PdfName.TRIMBOX, PdfName.ARTBOX
|
||||
};
|
||||
/** A series of viewer preferences */
|
||||
public static readonly PdfName[] PRINTSCALING_PREFERENCES = {
|
||||
PdfName.APPDEFAULT, PdfName.NONE
|
||||
};
|
||||
/** A series of viewer preferences. */
|
||||
public static readonly PdfName[] DUPLEX_PREFERENCES = {
|
||||
PdfName.SIMPLEX, PdfName.DUPLEXFLIPSHORTEDGE, PdfName.DUPLEXFLIPLONGEDGE
|
||||
};
|
||||
/** This value will hold the viewer preferences for the page layout and page mode. */
|
||||
private int pageLayoutAndMode = 0;
|
||||
|
||||
/** This dictionary holds the viewer preferences (other than page layout and page mode). */
|
||||
private PdfDictionary viewerPreferences = new PdfDictionary();
|
||||
|
||||
/** The mask to decide if a ViewerPreferences dictionary is needed */
|
||||
private const int viewerPreferencesMask = 0xfff000;
|
||||
|
||||
/**
|
||||
* Returns the page layout and page mode value.
|
||||
*/
|
||||
public int PageLayoutAndMode {
|
||||
get {
|
||||
return pageLayoutAndMode;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the viewer preferences.
|
||||
*/
|
||||
public PdfDictionary GetViewerPreferences() {
|
||||
return viewerPreferences;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the viewer preferences as the sum of several constants.
|
||||
*
|
||||
* @param preferences
|
||||
* the viewer preferences
|
||||
* @see PdfWriter#setViewerPreferences
|
||||
*/
|
||||
public int ViewerPreferences {
|
||||
set {
|
||||
int preferences = value;
|
||||
this.pageLayoutAndMode |= preferences;
|
||||
// for backwards compatibility, it is also possible
|
||||
// to set the following viewer preferences with this method:
|
||||
if ((preferences & viewerPreferencesMask) != 0) {
|
||||
pageLayoutAndMode = ~viewerPreferencesMask & pageLayoutAndMode;
|
||||
if ((preferences & PdfWriter.HideToolbar) != 0)
|
||||
viewerPreferences.Put(PdfName.HIDETOOLBAR, PdfBoolean.PDFTRUE);
|
||||
if ((preferences & PdfWriter.HideMenubar) != 0)
|
||||
viewerPreferences.Put(PdfName.HIDEMENUBAR, PdfBoolean.PDFTRUE);
|
||||
if ((preferences & PdfWriter.HideWindowUI) != 0)
|
||||
viewerPreferences.Put(PdfName.HIDEWINDOWUI, PdfBoolean.PDFTRUE);
|
||||
if ((preferences & PdfWriter.FitWindow) != 0)
|
||||
viewerPreferences.Put(PdfName.FITWINDOW, PdfBoolean.PDFTRUE);
|
||||
if ((preferences & PdfWriter.CenterWindow) != 0)
|
||||
viewerPreferences.Put(PdfName.CENTERWINDOW, PdfBoolean.PDFTRUE);
|
||||
if ((preferences & PdfWriter.DisplayDocTitle) != 0)
|
||||
viewerPreferences.Put(PdfName.DISPLAYDOCTITLE, PdfBoolean.PDFTRUE);
|
||||
|
||||
if ((preferences & PdfWriter.NonFullScreenPageModeUseNone) != 0)
|
||||
viewerPreferences.Put(PdfName.NONFULLSCREENPAGEMODE, PdfName.USENONE);
|
||||
else if ((preferences & PdfWriter.NonFullScreenPageModeUseOutlines) != 0)
|
||||
viewerPreferences.Put(PdfName.NONFULLSCREENPAGEMODE, PdfName.USEOUTLINES);
|
||||
else if ((preferences & PdfWriter.NonFullScreenPageModeUseThumbs) != 0)
|
||||
viewerPreferences.Put(PdfName.NONFULLSCREENPAGEMODE, PdfName.USETHUMBS);
|
||||
else if ((preferences & PdfWriter.NonFullScreenPageModeUseOC) != 0)
|
||||
viewerPreferences.Put(PdfName.NONFULLSCREENPAGEMODE, PdfName.USEOC);
|
||||
|
||||
if ((preferences & PdfWriter.DirectionL2R) != 0)
|
||||
viewerPreferences.Put(PdfName.DIRECTION, PdfName.L2R);
|
||||
else if ((preferences & PdfWriter.DirectionR2L) != 0)
|
||||
viewerPreferences.Put(PdfName.DIRECTION, PdfName.R2L);
|
||||
|
||||
if ((preferences & PdfWriter.PrintScalingNone) != 0)
|
||||
viewerPreferences.Put(PdfName.PRINTSCALING, PdfName.NONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a key for a viewer preference (a PdfName object),
|
||||
* this method returns the index in the VIEWER_PREFERENCES array.
|
||||
* @param key a PdfName referring to a viewer preference
|
||||
* @return an index in the VIEWER_PREFERENCES array
|
||||
*/
|
||||
private int GetIndex(PdfName key) {
|
||||
for (int i = 0; i < VIEWER_PREFERENCES.Length; i++) {
|
||||
if (VIEWER_PREFERENCES[i].Equals(key))
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if some value is valid for a certain key.
|
||||
*/
|
||||
private bool IsPossibleValue(PdfName value, PdfName[] accepted) {
|
||||
for (int i = 0; i < accepted.Length; i++) {
|
||||
if (accepted[i].Equals(value)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the viewer preferences for printing.
|
||||
*/
|
||||
public virtual void AddViewerPreference(PdfName key, PdfObject value) {
|
||||
switch (GetIndex(key)) {
|
||||
case 0: // HIDETOOLBAR
|
||||
case 1: // HIDEMENUBAR
|
||||
case 2: // HIDEWINDOWUI
|
||||
case 3: // FITWINDOW
|
||||
case 4: // CENTERWINDOW
|
||||
case 5: // DISPLAYDOCTITLE
|
||||
case 14: // PICKTRAYBYPDFSIZE
|
||||
if (value is PdfBoolean) {
|
||||
viewerPreferences.Put(key, value);
|
||||
}
|
||||
break;
|
||||
case 6: // NONFULLSCREENPAGEMODE
|
||||
if (value is PdfName
|
||||
&& IsPossibleValue((PdfName)value, NONFULLSCREENPAGEMODE_PREFERENCES)) {
|
||||
viewerPreferences.Put(key, value);
|
||||
}
|
||||
break;
|
||||
case 7: // DIRECTION
|
||||
if (value is PdfName
|
||||
&& IsPossibleValue((PdfName)value, DIRECTION_PREFERENCES)) {
|
||||
viewerPreferences.Put(key, value);
|
||||
}
|
||||
break;
|
||||
case 8: // VIEWAREA
|
||||
case 9: // VIEWCLIP
|
||||
case 10: // PRINTAREA
|
||||
case 11: // PRINTCLIP
|
||||
if (value is PdfName
|
||||
&& IsPossibleValue((PdfName)value, PAGE_BOUNDARIES)) {
|
||||
viewerPreferences.Put(key, value);
|
||||
}
|
||||
break;
|
||||
case 12: // PRINTSCALING
|
||||
if (value is PdfName
|
||||
&& IsPossibleValue((PdfName)value, PRINTSCALING_PREFERENCES)) {
|
||||
viewerPreferences.Put(key, value);
|
||||
}
|
||||
break;
|
||||
case 13: // DUPLEX
|
||||
if (value is PdfName
|
||||
&& IsPossibleValue((PdfName)value, DUPLEX_PREFERENCES)) {
|
||||
viewerPreferences.Put(key, value);
|
||||
}
|
||||
break;
|
||||
case 15: // PRINTPAGERANGE
|
||||
if (value is PdfArray) {
|
||||
viewerPreferences.Put(key, value);
|
||||
}
|
||||
break;
|
||||
case 16: // NUMCOPIES
|
||||
if (value is PdfNumber) {
|
||||
viewerPreferences.Put(key, value);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the viewer preferences defined in the preferences parameter to a
|
||||
* PdfDictionary (more specifically the root or catalog of a PDF file).
|
||||
*
|
||||
* @param catalog
|
||||
*/
|
||||
public void AddToCatalog(PdfDictionary catalog) {
|
||||
// Page Layout
|
||||
catalog.Remove(PdfName.PAGELAYOUT);
|
||||
if ((pageLayoutAndMode & PdfWriter.PageLayoutSinglePage) != 0)
|
||||
catalog.Put(PdfName.PAGELAYOUT, PdfName.SINGLEPAGE);
|
||||
else if ((pageLayoutAndMode & PdfWriter.PageLayoutOneColumn) != 0)
|
||||
catalog.Put(PdfName.PAGELAYOUT, PdfName.ONECOLUMN);
|
||||
else if ((pageLayoutAndMode & PdfWriter.PageLayoutTwoColumnLeft) != 0)
|
||||
catalog.Put(PdfName.PAGELAYOUT, PdfName.TWOCOLUMNLEFT);
|
||||
else if ((pageLayoutAndMode & PdfWriter.PageLayoutTwoColumnRight) != 0)
|
||||
catalog.Put(PdfName.PAGELAYOUT, PdfName.TWOCOLUMNRIGHT);
|
||||
else if ((pageLayoutAndMode & PdfWriter.PageLayoutTwoPageLeft) != 0)
|
||||
catalog.Put(PdfName.PAGELAYOUT, PdfName.TWOPAGELEFT);
|
||||
else if ((pageLayoutAndMode & PdfWriter.PageLayoutTwoPageRight) != 0)
|
||||
catalog.Put(PdfName.PAGELAYOUT, PdfName.TWOPAGERIGHT);
|
||||
|
||||
// Page Mode
|
||||
catalog.Remove(PdfName.PAGEMODE);
|
||||
if ((pageLayoutAndMode & PdfWriter.PageModeUseNone) != 0)
|
||||
catalog.Put(PdfName.PAGEMODE, PdfName.USENONE);
|
||||
else if ((pageLayoutAndMode & PdfWriter.PageModeUseOutlines) != 0)
|
||||
catalog.Put(PdfName.PAGEMODE, PdfName.USEOUTLINES);
|
||||
else if ((pageLayoutAndMode & PdfWriter.PageModeUseThumbs) != 0)
|
||||
catalog.Put(PdfName.PAGEMODE, PdfName.USETHUMBS);
|
||||
else if ((pageLayoutAndMode & PdfWriter.PageModeFullScreen) != 0)
|
||||
catalog.Put(PdfName.PAGEMODE, PdfName.FULLSCREEN);
|
||||
else if ((pageLayoutAndMode & PdfWriter.PageModeUseOC) != 0)
|
||||
catalog.Put(PdfName.PAGEMODE, PdfName.USEOC);
|
||||
else if ((pageLayoutAndMode & PdfWriter.PageModeUseAttachments) != 0)
|
||||
catalog.Put(PdfName.PAGEMODE, PdfName.USEATTACHMENTS);
|
||||
|
||||
// viewer preferences (Table 8.1 of the PDF Reference)
|
||||
catalog.Remove(PdfName.VIEWERPREFERENCES);
|
||||
if (viewerPreferences.Size > 0) {
|
||||
catalog.Put(PdfName.VIEWERPREFERENCES, viewerPreferences);
|
||||
}
|
||||
}
|
||||
|
||||
public static PdfViewerPreferencesImp GetViewerPreferences(PdfDictionary catalog) {
|
||||
PdfViewerPreferencesImp preferences = new PdfViewerPreferencesImp();
|
||||
int prefs = 0;
|
||||
PdfName name = null;
|
||||
// page layout
|
||||
PdfObject obj = PdfReader.GetPdfObjectRelease(catalog.Get(PdfName.PAGELAYOUT));
|
||||
if (obj != null && obj.IsName()) {
|
||||
name = (PdfName) obj;
|
||||
if (name.Equals(PdfName.SINGLEPAGE))
|
||||
prefs |= PdfWriter.PageLayoutSinglePage;
|
||||
else if (name.Equals(PdfName.ONECOLUMN))
|
||||
prefs |= PdfWriter.PageLayoutOneColumn;
|
||||
else if (name.Equals(PdfName.TWOCOLUMNLEFT))
|
||||
prefs |= PdfWriter.PageLayoutTwoColumnLeft;
|
||||
else if (name.Equals(PdfName.TWOCOLUMNRIGHT))
|
||||
prefs |= PdfWriter.PageLayoutTwoColumnRight;
|
||||
else if (name.Equals(PdfName.TWOPAGELEFT))
|
||||
prefs |= PdfWriter.PageLayoutTwoPageLeft;
|
||||
else if (name.Equals(PdfName.TWOPAGERIGHT))
|
||||
prefs |= PdfWriter.PageLayoutTwoPageRight;
|
||||
}
|
||||
// page mode
|
||||
obj = PdfReader.GetPdfObjectRelease(catalog.Get(PdfName.PAGEMODE));
|
||||
if (obj != null && obj.IsName()) {
|
||||
name = (PdfName) obj;
|
||||
if (name.Equals(PdfName.USENONE))
|
||||
prefs |= PdfWriter.PageModeUseNone;
|
||||
else if (name.Equals(PdfName.USEOUTLINES))
|
||||
prefs |= PdfWriter.PageModeUseOutlines;
|
||||
else if (name.Equals(PdfName.USETHUMBS))
|
||||
prefs |= PdfWriter.PageModeUseThumbs;
|
||||
else if (name.Equals(PdfName.USEOC))
|
||||
prefs |= PdfWriter.PageModeUseOC;
|
||||
else if (name.Equals(PdfName.USEATTACHMENTS))
|
||||
prefs |= PdfWriter.PageModeUseAttachments;
|
||||
}
|
||||
// set page layout and page mode preferences
|
||||
preferences.ViewerPreferences = prefs;
|
||||
// other preferences
|
||||
obj = PdfReader.GetPdfObjectRelease(catalog
|
||||
.Get(PdfName.VIEWERPREFERENCES));
|
||||
if (obj != null && obj.IsDictionary()) {
|
||||
PdfDictionary vp = (PdfDictionary) obj;
|
||||
for (int i = 0; i < VIEWER_PREFERENCES.Length; i++) {
|
||||
obj = PdfReader.GetPdfObjectRelease(vp.Get(VIEWER_PREFERENCES[i]));
|
||||
preferences.AddViewerPreference(VIEWER_PREFERENCES[i], obj);
|
||||
}
|
||||
}
|
||||
return preferences;
|
||||
}
|
||||
}
|
||||
}
|
256
iTechSharp/iTextSharp/text/pdf/intern/PdfXConformanceImp.cs
Normal file
256
iTechSharp/iTextSharp/text/pdf/intern/PdfXConformanceImp.cs
Normal file
@@ -0,0 +1,256 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using iTextSharp.text.pdf;
|
||||
using iTextSharp.text;
|
||||
using iTextSharp.text.pdf.interfaces;
|
||||
|
||||
/*
|
||||
* $Id: PdfXConformanceImp.cs,v 1.3 2007/06/05 15:00:44 psoares33 Exp $
|
||||
*
|
||||
* Copyright 2006 Bruno Lowagie (based on code by Paulo Soares)
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is 'iText, a free JAVA-PDF library'.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
|
||||
* the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
|
||||
* All Rights Reserved.
|
||||
* Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
|
||||
* are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): all the names of the contributors are added in the source code
|
||||
* where applicable.
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of the
|
||||
* LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
|
||||
* provisions of LGPL are applicable instead of those above. If you wish to
|
||||
* allow use of your version of this file only under the terms of the LGPL
|
||||
* License and not to allow others to use your version of this file under
|
||||
* the MPL, indicate your decision by deleting the provisions above and
|
||||
* replace them with the notice and other provisions required by the LGPL.
|
||||
* If you do not delete the provisions above, a recipient may use your version
|
||||
* of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the MPL as stated above or under the terms of the GNU
|
||||
* Library General Public License as published by the Free Software Foundation;
|
||||
* either version 2 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
|
||||
* details.
|
||||
*
|
||||
* If you didn't download this code from the following link, you should check if
|
||||
* you aren't using an obsolete version:
|
||||
* http://www.lowagie.com/iText/
|
||||
*/
|
||||
|
||||
namespace iTextSharp.text.pdf.intern {
|
||||
|
||||
public class PdfXConformanceImp : IPdfXConformance {
|
||||
|
||||
/** A key for an aspect that can be checked for PDF/X Conformance. */
|
||||
public const int PDFXKEY_COLOR = 1;
|
||||
/** A key for an aspect that can be checked for PDF/X Conformance. */
|
||||
public const int PDFXKEY_CMYK = 2;
|
||||
/** A key for an aspect that can be checked for PDF/X Conformance. */
|
||||
public const int PDFXKEY_RGB = 3;
|
||||
/** A key for an aspect that can be checked for PDF/X Conformance. */
|
||||
public const int PDFXKEY_FONT = 4;
|
||||
/** A key for an aspect that can be checked for PDF/X Conformance. */
|
||||
public const int PDFXKEY_IMAGE = 5;
|
||||
/** A key for an aspect that can be checked for PDF/X Conformance. */
|
||||
public const int PDFXKEY_GSTATE = 6;
|
||||
/** A key for an aspect that can be checked for PDF/X Conformance. */
|
||||
public const int PDFXKEY_LAYER = 7;
|
||||
|
||||
/**
|
||||
* The value indicating if the PDF has to be in conformance with PDF/X.
|
||||
*/
|
||||
protected internal int pdfxConformance = PdfWriter.PDFXNONE;
|
||||
|
||||
/**
|
||||
* @see com.lowagie.text.pdf.interfaces.PdfXConformance#setPDFXConformance(int)
|
||||
*/
|
||||
public int PDFXConformance {
|
||||
set {
|
||||
this.pdfxConformance = value;
|
||||
}
|
||||
get {
|
||||
return pdfxConformance;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the PDF/X Conformance is necessary.
|
||||
* @return true if the PDF has to be in conformance with any of the PDF/X specifications
|
||||
*/
|
||||
public bool IsPdfX() {
|
||||
return pdfxConformance != PdfWriter.PDFXNONE;
|
||||
}
|
||||
/**
|
||||
* Checks if the PDF has to be in conformance with PDF/X-1a:2001
|
||||
* @return true of the PDF has to be in conformance with PDF/X-1a:2001
|
||||
*/
|
||||
public bool IsPdfX1A2001() {
|
||||
return pdfxConformance == PdfWriter.PDFX1A2001;
|
||||
}
|
||||
/**
|
||||
* Checks if the PDF has to be in conformance with PDF/X-3:2002
|
||||
* @return true of the PDF has to be in conformance with PDF/X-3:2002
|
||||
*/
|
||||
public bool IsPdfX32002() {
|
||||
return pdfxConformance == PdfWriter.PDFX32002;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the PDF has to be in conformance with PDFA1
|
||||
* @return true of the PDF has to be in conformance with PDFA1
|
||||
*/
|
||||
public bool IsPdfA1() {
|
||||
return pdfxConformance == PdfWriter.PDFA1A || pdfxConformance == PdfWriter.PDFA1B;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the PDF has to be in conformance with PDFA1A
|
||||
* @return true of the PDF has to be in conformance with PDFA1A
|
||||
*/
|
||||
public bool IsPdfA1A() {
|
||||
return pdfxConformance == PdfWriter.PDFA1A;
|
||||
}
|
||||
|
||||
public void CompleteInfoDictionary(PdfDictionary info) {
|
||||
if (IsPdfX() && !IsPdfA1()) {
|
||||
if (info.Get(PdfName.GTS_PDFXVERSION) == null) {
|
||||
if (IsPdfX1A2001()) {
|
||||
info.Put(PdfName.GTS_PDFXVERSION, new PdfString("PDF/X-1:2001"));
|
||||
info.Put(new PdfName("GTS_PDFXConformance"), new PdfString("PDF/X-1a:2001"));
|
||||
}
|
||||
else if (IsPdfX32002())
|
||||
info.Put(PdfName.GTS_PDFXVERSION, new PdfString("PDF/X-3:2002"));
|
||||
}
|
||||
if (info.Get(PdfName.TITLE) == null) {
|
||||
info.Put(PdfName.TITLE, new PdfString("Pdf document"));
|
||||
}
|
||||
if (info.Get(PdfName.CREATOR) == null) {
|
||||
info.Put(PdfName.CREATOR, new PdfString("Unknown"));
|
||||
}
|
||||
if (info.Get(PdfName.TRAPPED) == null) {
|
||||
info.Put(PdfName.TRAPPED, new PdfName("False"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void CompleteExtraCatalog(PdfDictionary extraCatalog) {
|
||||
if (IsPdfX() && !IsPdfA1()) {
|
||||
if (extraCatalog.Get(PdfName.OUTPUTINTENTS) == null) {
|
||||
PdfDictionary outp = new PdfDictionary(PdfName.OUTPUTINTENT);
|
||||
outp.Put(PdfName.OUTPUTCONDITION, new PdfString("SWOP CGATS TR 001-1995"));
|
||||
outp.Put(PdfName.OUTPUTCONDITIONIDENTIFIER, new PdfString("CGATS TR 001"));
|
||||
outp.Put(PdfName.REGISTRYNAME, new PdfString("http://www.color.org"));
|
||||
outp.Put(PdfName.INFO, new PdfString(""));
|
||||
outp.Put(PdfName.S, PdfName.GTS_PDFX);
|
||||
extraCatalog.Put(PdfName.OUTPUTINTENTS, new PdfArray(outp));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Business logic that checks if a certain object is in conformance with PDF/X.
|
||||
* @param writer the writer that is supposed to write the PDF/X file
|
||||
* @param key the type of PDF/X conformance that has to be checked
|
||||
* @param obj1 the object that is checked for conformance
|
||||
*/
|
||||
public static void CheckPDFXConformance(PdfWriter writer, int key, Object obj1) {
|
||||
if (writer == null || !writer.IsPdfX())
|
||||
return;
|
||||
int conf = writer.PDFXConformance;
|
||||
switch (key) {
|
||||
case PDFXKEY_COLOR:
|
||||
switch (conf) {
|
||||
case PdfWriter.PDFX1A2001:
|
||||
if (obj1 is ExtendedColor) {
|
||||
ExtendedColor ec = (ExtendedColor)obj1;
|
||||
switch (ec.Type) {
|
||||
case ExtendedColor.TYPE_CMYK:
|
||||
case ExtendedColor.TYPE_GRAY:
|
||||
return;
|
||||
case ExtendedColor.TYPE_RGB:
|
||||
throw new PdfXConformanceException("Colorspace RGB is not allowed.");
|
||||
case ExtendedColor.TYPE_SEPARATION:
|
||||
SpotColor sc = (SpotColor)ec;
|
||||
CheckPDFXConformance(writer, PDFXKEY_COLOR, sc.PdfSpotColor.AlternativeCS);
|
||||
break;
|
||||
case ExtendedColor.TYPE_SHADING:
|
||||
ShadingColor xc = (ShadingColor)ec;
|
||||
CheckPDFXConformance(writer, PDFXKEY_COLOR, xc.PdfShadingPattern.Shading.ColorSpace);
|
||||
break;
|
||||
case ExtendedColor.TYPE_PATTERN:
|
||||
PatternColor pc = (PatternColor)ec;
|
||||
CheckPDFXConformance(writer, PDFXKEY_COLOR, pc.Painter.DefaultColor);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (obj1 is Color)
|
||||
throw new PdfXConformanceException("Colorspace RGB is not allowed.");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PDFXKEY_CMYK:
|
||||
break;
|
||||
case PDFXKEY_RGB:
|
||||
if (conf == PdfWriter.PDFX1A2001)
|
||||
throw new PdfXConformanceException("Colorspace RGB is not allowed.");
|
||||
break;
|
||||
case PDFXKEY_FONT:
|
||||
if (!((BaseFont)obj1).IsEmbedded())
|
||||
throw new PdfXConformanceException("All the fonts must be embedded.");
|
||||
break;
|
||||
case PDFXKEY_IMAGE:
|
||||
PdfImage image = (PdfImage)obj1;
|
||||
if (image.Get(PdfName.SMASK) != null)
|
||||
throw new PdfXConformanceException("The /SMask key is not allowed in images.");
|
||||
switch (conf) {
|
||||
case PdfWriter.PDFX1A2001:
|
||||
PdfObject cs = image.Get(PdfName.COLORSPACE);
|
||||
if (cs == null)
|
||||
return;
|
||||
if (cs.IsName()) {
|
||||
if (PdfName.DEVICERGB.Equals(cs))
|
||||
throw new PdfXConformanceException("Colorspace RGB is not allowed.");
|
||||
}
|
||||
else if (cs.IsArray()) {
|
||||
if (PdfName.CALRGB.Equals(((PdfArray)cs).ArrayList[0]))
|
||||
throw new PdfXConformanceException("Colorspace CalRGB is not allowed.");
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PDFXKEY_GSTATE:
|
||||
PdfDictionary gs = (PdfDictionary)obj1;
|
||||
PdfObject obj = gs.Get(PdfName.BM);
|
||||
if (obj != null && !PdfGState.BM_NORMAL.Equals(obj) && !PdfGState.BM_COMPATIBLE.Equals(obj))
|
||||
throw new PdfXConformanceException("Blend mode " + obj.ToString() + " not allowed.");
|
||||
obj = gs.Get(PdfName.CA);
|
||||
double v = 0.0;
|
||||
if (obj != null && (v = ((PdfNumber)obj).DoubleValue) != 1.0)
|
||||
throw new PdfXConformanceException("Transparency is not allowed: /CA = " + v);
|
||||
obj = gs.Get(PdfName.ca_);
|
||||
v = 0.0;
|
||||
if (obj != null && (v = ((PdfNumber)obj).DoubleValue) != 1.0)
|
||||
throw new PdfXConformanceException("Transparency is not allowed: /ca = " + v);
|
||||
break;
|
||||
case PDFXKEY_LAYER:
|
||||
throw new PdfXConformanceException("Layers are not allowed.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user