summaryrefslogtreecommitdiff
path: root/vcl/source/gdi/pdfwriter_impl.cxx
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2020-06-19 09:51:58 +0200
committerMiklos Vajna <vmiklos@collabora.com>2020-06-19 10:48:46 +0200
commit3bb145bd4665a871491b08f75057223bab798d45 (patch)
treef7e6e80155a45981c9de38927a9b892cad1fca83 /vcl/source/gdi/pdfwriter_impl.cxx
parent17f47b3972301273716466656e775f3f09d681d8 (diff)
sd signature line: extract page resource / content copy code
So the "sign existing pdf" code can reuse it. Change-Id: I63a811f0c6f2bc2eeb29507aff9bc35e92a081cd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96617 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
Diffstat (limited to 'vcl/source/gdi/pdfwriter_impl.cxx')
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx54
1 files changed, 3 insertions, 51 deletions
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 44c21afb2214..47a697785564 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -8417,9 +8417,6 @@ void PDFWriterImpl::writeReferenceXObject(ReferenceXObjectEmit& rEmit)
return;
}
- // Maps from source object id (PDF image) to target object id (export result).
- std::map<sal_Int32, sal_Int32> aCopiedResources;
-
nWrappedFormObject = createObject();
// Write the form XObject wrapped below. This is a separate object from
// the wrapper, this way there is no need to alter the stream contents.
@@ -8457,19 +8454,8 @@ void PDFWriterImpl::writeReferenceXObject(ReferenceXObjectEmit& rEmit)
}
}
- aLine.append(" /Resources <<");
- static const std::initializer_list<OString> aKeys =
- {
- "ColorSpace",
- "ExtGState",
- "Font",
- "XObject",
- "Shading"
- };
PDFObjectCopier aCopier(*this);
- for (const auto& rKey : aKeys)
- aLine.append(aCopier.copyExternalResources(*pPage, rKey, aCopiedResources));
- aLine.append(">>");
+ aCopier.copyPageResources(pPage, aLine);
aLine.append(" /BBox [ 0 0 ");
aLine.append(nWidth);
aLine.append(" ");
@@ -8481,42 +8467,8 @@ void PDFWriterImpl::writeReferenceXObject(ReferenceXObjectEmit& rEmit)
aLine.append(" /Length ");
SvMemoryStream aStream;
- for (auto pContent : aContentStreams)
- {
- filter::PDFStreamElement* pPageStream = pContent->GetStream();
- if (!pPageStream)
- {
- SAL_WARN("vcl.pdfwriter", "PDFWriterImpl::writeReferenceXObject: contents has no stream");
- continue;
- }
-
- SvMemoryStream& rPageStream = pPageStream->GetMemory();
-
- auto pFilter = dynamic_cast<filter::PDFNameElement*>(pContent->Lookup("Filter"));
- if (pFilter)
- {
- if (pFilter->GetValue() != "FlateDecode")
- continue;
-
- SvMemoryStream aMemoryStream;
- ZCodec aZCodec;
- rPageStream.Seek(0);
- aZCodec.BeginCompression();
- aZCodec.Decompress(rPageStream, aMemoryStream);
- if (!aZCodec.EndCompression())
- {
- SAL_WARN("vcl.pdfwriter", "PDFWriterImpl::writeReferenceXObject: decompression failed");
- continue;
- }
-
- aStream.WriteBytes(aMemoryStream.GetData(), aMemoryStream.GetSize());
- }
- else
- aStream.WriteBytes(rPageStream.GetData(), rPageStream.GetSize());
- }
-
- compressStream(&aStream);
- sal_Int32 nLength = aStream.Tell();
+ bool bCompressed = false;
+ sal_Int32 nLength = PDFObjectCopier::copyPageStreams(aContentStreams, aStream, bCompressed);
aLine.append(nLength);
aLine.append(">>\nstream\n");