Add support to extract viewer preference
authorBo Xu <bo_xu@foxitsoftware.com>
Mon, 14 Jul 2014 20:22:47 +0000 (13:22 -0700)
committerBo Xu <bo_xu@foxitsoftware.com>
Mon, 14 Jul 2014 20:22:47 +0000 (13:22 -0700)
This change adds the support to extract "NumCopies", "PrintPageRange", "Duplex" viewer preferences for printing.

BUG=169120
R=bo_xu@foxitsoftware.com, vitalybuka@chromium.org

Review URL: https://codereview.chromium.org/345123002

core/include/fpdfdoc/fpdf_doc.h
core/src/fpdfdoc/doc_viewerPreferences.cpp
fpdfsdk/include/fpdfview.h
fpdfsdk/src/fpdfview.cpp

index cbb0fd4..e4cf777 100644 (file)
@@ -1657,6 +1657,11 @@ public:
 
     FX_BOOL PrintScaling() const;
 
+    FX_INT32 NumCopies() const;
+
+    CPDF_Array* PrintPageRange() const;
+
+    CFX_ByteString Duplex() const;
 
 protected:
     CPDF_Document*     m_pDoc;
index 617485c..f68d3fb 100644 (file)
@@ -29,3 +29,32 @@ FX_BOOL CPDF_ViewerPreferences::PrintScaling() const
     }
     return FX_BSTRC("None") != pDict->GetString(FX_BSTRC("PrintScaling"));
 }
+FX_INT32 CPDF_ViewerPreferences::NumCopies() const
+{
+    CPDF_Dictionary *pDict = m_pDoc->GetRoot();
+    pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
+    if (!pDict) {
+        return 1;
+    }
+    return pDict->GetInteger(FX_BSTRC("NumCopies"));
+}
+CPDF_Array* CPDF_ViewerPreferences::PrintPageRange() const
+{
+    CPDF_Dictionary *pDict = m_pDoc->GetRoot();
+    CPDF_Array *pRange = NULL;
+    pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
+    if (!pDict) {
+        return pRange;
+    }
+    pRange = pDict->GetArray(FX_BSTRC("PrintPageRange"));
+    return pRange;
+}
+CFX_ByteString CPDF_ViewerPreferences::Duplex() const
+{
+    CPDF_Dictionary *pDict = m_pDoc->GetRoot();
+    pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
+    if (!pDict) {
+        return FX_BSTRC("None");
+    }
+    return pDict->GetString(FX_BSTRC("Duplex"));
+}
index f4f1375..1b7ae2e 100644 (file)
@@ -34,6 +34,7 @@ typedef void* FPDF_BOOKMARK;
 typedef void*  FPDF_DEST;
 typedef void*  FPDF_ACTION;
 typedef void*  FPDF_LINK;
+typedef void*   FPDF_PAGERANGE;
 
 // Basic data types
 typedef int                            FPDF_BOOL;
@@ -42,6 +43,14 @@ typedef unsigned long        FPDF_DWORD;
 
 typedef        float                   FS_FLOAT;
 
+// Duplex types
+typedef enum _FPDF_DUPLEXTYPE_ {
+    DuplexUndefined = 0,
+    Simplex,
+    DuplexFlipShortEdge,
+    DuplexFlipLongEdge
+} FPDF_DUPLEXTYPE;
+
 // String types
 typedef unsigned short                 FPDF_WCHAR;
 typedef unsigned char const*   FPDF_LPCBYTE;
@@ -556,6 +565,33 @@ DLLEXPORT void STDCALL FPDFBitmap_Destroy(FPDF_BITMAP bitmap);
 //
 DLLEXPORT FPDF_BOOL STDCALL FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document);
 
+// Function: FPDF_VIEWERREF_GetNumCopies
+//                     Returns the number of copies to be printed.
+// Parameters:
+//                     document        -       Handle to the loaded document.
+// Return value:
+//          The number of copies to be printed.
+//
+DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document);
+
+// Function: FPDF_VIEWERREF_GetPrintPageRange
+//                     Page numbers to initialize print dialog box when file is printed.
+// Parameters:
+//                     document        -       Handle to the loaded document.
+// Return value:
+//          The print page range to be used for printing.
+//
+DLLEXPORT FPDF_PAGERANGE STDCALL FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document);
+
+// Function: FPDF_VIEWERREF_GetDuplex
+//                     Returns the paper handling option to be used when printing from print dialog.
+// Parameters:
+//                     document        -       Handle to the loaded document.
+// Return value:
+//          The paper handling option to be used when printing.
+//
+DLLEXPORT FPDF_DUPLEXTYPE STDCALL FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document);
+
 // Function: FPDF_GetNamedDestByName
 //                     get a special dest handle by the index.
 // Parameters: 
index a9aa9a8..8a97c28 100644 (file)
@@ -859,6 +859,37 @@ DLLEXPORT FPDF_BOOL STDCALL FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT documen
        return viewRef.PrintScaling();
 }
 
+DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document)
+{
+    CPDF_Document* pDoc = (CPDF_Document*)document;
+    if (!pDoc) return 1;
+    CPDF_ViewerPreferences viewRef(pDoc);
+    return viewRef.NumCopies();
+}
+
+DLLEXPORT FPDF_PAGERANGE STDCALL FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document)
+{
+    CPDF_Document* pDoc = (CPDF_Document*)document;
+    if (!pDoc) return NULL;
+    CPDF_ViewerPreferences viewRef(pDoc);
+    return viewRef.PrintPageRange();
+}
+
+DLLEXPORT FPDF_DUPLEXTYPE STDCALL FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document)
+{
+    CPDF_Document* pDoc = (CPDF_Document*)document;
+    if (!pDoc) return DuplexUndefined;
+    CPDF_ViewerPreferences viewRef(pDoc);
+    CFX_ByteString duplex = viewRef.Duplex();
+    if (FX_BSTRC("Simplex") == duplex)
+        return Simplex;
+    if (FX_BSTRC("DuplexFlipShortEdge") == duplex)
+        return DuplexFlipShortEdge;
+    if (FX_BSTRC("DuplexFlipLongEdge") == duplex)
+        return DuplexFlipLongEdge;
+    return DuplexUndefined;
+}
+
 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,FPDF_BYTESTRING name)
 {
        if (document == NULL)