1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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"
23 # include <fcntl.h> /*_O_BINARY*/
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
)
38 if (!strcmp(argv
[k
], "-f"))
40 outputFile
= argv
[k
+1];
42 for (int j
= k
; j
< argc
; ++j
)
45 else if (!strcmp(argv
[k
], "-o"))
49 for (int j
= k
; j
< argc
; ++j
)
53 else if (!strcmp(argv
[k
], "-opw"))
55 ownerPassword
= argv
[k
+1];
57 for (int j
= k
; j
< argc
; ++j
)
60 else if (!strcmp(argv
[k
], "-upw"))
62 userPassword
= argv
[k
+1];
64 for (int j
= k
; j
< argc
; ++j
)
71 #if POPPLER_CHECK_VERSION(0, 83, 0)
72 globalParams
= std::make_unique
<GlobalParams
>();
74 globalParams
= new GlobalParams();
76 globalParams
->setErrQuiet(true);
78 globalParams
->setupBaseFonts(nullptr);
81 // try to read a possible open password from stdin
84 if( ! fgets( aPwBuf
, sizeof(aPwBuf
)-1, stdin
) )
85 aPwBuf
[0] = 0; // mark as empty
88 for( size_t i
= 0; i
< sizeof(aPwBuf
); i
++ )
90 if( aPwBuf
[i
] == '\n' )
98 // PDFDoc takes over ownership for all strings below
99 GooString
* pFileName
= new GooString(argv
[1]);
100 GooString
* pErrFileName
= new GooString(argv
[2]);
102 // check for password string(s)
103 GooString
* pOwnerPasswordStr( aPwBuf
[0] != 0
104 ? new GooString( aPwBuf
)
105 : (ownerPassword
[0] != '\001'
106 ? new GooString(ownerPassword
)
108 GooString
* pUserPasswordStr( aPwBuf
[0] != 0
109 ? new GooString( aPwBuf
)
110 : (userPassword
[0] != '\001'
111 ? new GooString(userPassword
)
113 if( outputFile
[0] != '\001' )
114 g_binary_out
= fopen(outputFile
,"wb");
117 // Win actually modifies output for O_TEXT file mode, so need to
118 // revert to binary here
119 _setmode( _fileno( g_binary_out
), _O_BINARY
);
122 PDFDoc
aDoc( pFileName
,
126 PDFDoc
aErrDoc( pErrFileName
,
130 // Check various permissions for aDoc.
131 PDFDoc
&rDoc
= aDoc
.isOk()? aDoc
: aErrDoc
;
133 pdfi::PDFOutDev
aOutDev(&rDoc
);
134 if (!strcmp(options
, "SkipImages")) {
135 aOutDev
.setSkipImages(true);
138 // tell the receiver early - needed for proper progress calculation
139 const int nPages
= rDoc
.isOk()? rDoc
.getNumPages(): 0;
140 pdfi::PDFOutDev::setPageNum(nPages
);
142 // virtual resolution of the PDF OutputDev in dpi
143 static const int PDFI_OUTDEV_RESOLUTION
= 7200;
146 for (int i
= 1; i
<= nPages
; ++i
)
148 rDoc
.displayPage(&aOutDev
,
150 PDFI_OUTDEV_RESOLUTION
,
151 PDFI_OUTDEV_RESOLUTION
,
152 0, true, true, true);
153 rDoc
.processLinks(&aOutDev
, i
);
159 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */