fix baseline build (old cairo) - 'cairo_rectangle_int_t' does not name a type
[LibreOffice.git] / sdext / source / pdfimport / xpdfwrapper / wrapper_gpl.cxx
blobed4c65fda2d67e2aabd2ff0443ee3e79f8a8981f
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include "pdfioutdev_gpl.hxx"
21 #ifdef WNT
22 # include <io.h>
23 # include <fcntl.h> /*_O_BINARY*/
24 #endif
26 FILE* g_binary_out=stderr;
28 static const char *ownerPassword = "\001";
29 static const char *userPassword = "\001";
30 static const char *outputFile = "\001";
31 static const char *options = "\001";
33 int main(int argc, char **argv)
35 int k = 0;
36 while (k < argc)
38 if (!strcmp(argv[k], "-f"))
40 outputFile = argv[k+1];
41 argc -= 2;
42 for (int j = k; j < argc; ++j)
43 argv[j] = argv[j+2];
45 else if (!strcmp(argv[k], "-o"))
47 options = argv[k+1];
48 argc -= 2;
49 for (int j = k; j < argc; ++j)
50 argv[j] = argv[j+2];
53 else if (!strcmp(argv[k], "-opw"))
55 ownerPassword = argv[k+1];
56 argc -= 2;
57 for (int j = k; j < argc; ++j)
58 argv[j] = argv[j+2];
60 else if (!strcmp(argv[k], "-upw"))
62 userPassword = argv[k+1];
63 argc -= 2;
64 for (int j = k; j < argc; ++j)
65 argv[j] = argv[j+2];
67 ++k;
70 // read config file
71 globalParams = new GlobalParams();
72 globalParams->setErrQuiet(gTrue);
73 #if defined(_MSC_VER)
74 globalParams->setupBaseFonts(NULL);
75 #endif
77 // try to read a possible open password form stdin
78 char aPwBuf[129];
79 aPwBuf[128] = 0;
80 if( ! fgets( aPwBuf, sizeof(aPwBuf)-1, stdin ) )
81 aPwBuf[0] = 0; // mark as empty
82 else
84 for( unsigned int i = 0; i < sizeof(aPwBuf); i++ )
86 if( aPwBuf[i] == '\n' )
88 aPwBuf[i] = 0;
89 break;
94 // PDFDoc takes over ownership for all strings below
95 GooString* pFileName = new GooString(argv[1]);
96 GooString* pErrFileName = new GooString(argv[2]);
98 // check for password string(s)
99 GooString* pOwnerPasswordStr( aPwBuf[0] != 0
100 ? new GooString( aPwBuf )
101 : (ownerPassword[0] != '\001'
102 ? new GooString(ownerPassword)
103 : (GooString *)NULL ) );
104 GooString* pUserPasswordStr( userPassword[0] != '\001'
105 ? new GooString(userPassword)
106 : (GooString *)NULL );
107 if( outputFile[0] != '\001' )
108 g_binary_out = fopen(outputFile,"wb");
110 #ifdef WNT
111 // Win actually modifies output for O_TEXT file mode, so need to
112 // revert to binary here
113 _setmode( _fileno( g_binary_out ), _O_BINARY );
114 #endif
116 PDFDoc aDoc( pFileName,
117 pOwnerPasswordStr,
118 pUserPasswordStr );
120 PDFDoc aErrDoc( pErrFileName,
121 pOwnerPasswordStr,
122 pUserPasswordStr );
124 // Check various permissions for aDoc.
125 PDFDoc &rDoc = aDoc.isOk()? aDoc: aErrDoc;
127 pdfi::PDFOutDev aOutDev(&rDoc);
128 if (!strcmp(options, "SkipImages")) {
129 aOutDev.setSkipImages(true);
132 // tell the receiver early - needed for proper progress calculation
133 const int nPages = rDoc.isOk()? rDoc.getNumPages(): 0;
134 pdfi::PDFOutDev::setPageNum(nPages);
136 // virtual resolution of the PDF OutputDev in dpi
137 static const int PDFI_OUTDEV_RESOLUTION = 7200;
139 // do the conversion
140 for (int i = 1; i <= nPages; ++i)
142 rDoc.displayPage(&aOutDev,
144 PDFI_OUTDEV_RESOLUTION,
145 PDFI_OUTDEV_RESOLUTION,
146 0, gTrue, gTrue, gTrue);
147 rDoc.processLinks(&aOutDev, i);
150 return 0;
153 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */