On Tue, 2010-11-30 at 10:36 -0500, Joe Smith wrote:
> Can someone running LibO on Fedora try and reproduce this bug:
> 
> document hyperlink with utf-8 characters fails export to PDF
> http://qa.openoffice.org/issues/show_bug.cgi?id=115788
> 
> So far no one else can reproduce it.

I can.  Its a problem in vcl/source/gdi/pdfwriter_impl.cxx and
DECODE_WITH_CHARSET.

We now always write as US_ASCII to pdf now, which is one change from
3.2.1, so pretty much anything with DECODE_WITH_CHARSET in that file is
very dubious unfortunately.

The attached two alternative fixes would fix it for me. Either don't
decode URIs and leave %XX in them (This might adversely affect the
"Launch" target, whatever that exactly does in PDF), or assume that we
can write as UTF-8 always. Probably need to go read the pdf spec to see
what's the correct option here.

C.
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index b3679aa..693d8ef 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -4665,7 +4667,7 @@ we check in the following sequence:
 //substitute the fragment
                         aTargetURL.SetMark( aLineLoc.getStr() );
                     }
-                    rtl::OUString aURL = aTargetURL.GetMainURL( (nSetRelative || eTargetProtocol == INET_PROT_FILE) ? INetURLObject::DECODE_WITH_CHARSET : INetURLObject::NO_DECODE );
+                    rtl::OUString aURL = aTargetURL.GetMainURL( INetURLObject::NO_DECODE );
 // check if we have a URL available, if the string is empty, set it as the original one
 //                 if( aURL.getLength() == 0 )
 //                     appendLiteralStringEncrypt( rLink.m_aURL , rLink.m_nObject, aLine );
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index b3679aa..bc4ecca 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -69,6 +69,8 @@
 #include <icc/sRGB-IEC61966-2.1.hxx>
 #include <vcl/lineinfo.hxx>
 
+#include <stdio.h>
+
 using namespace vcl;
 using namespace rtl;
 
@@ -2008,7 +2010,7 @@ inline void PDFWriterImpl::appendLiteralStringEncrypt( const rtl::OString& rInSt
 
 inline void PDFWriterImpl::appendLiteralStringEncrypt( const rtl::OUString& rInString, const sal_Int32 nInObjectNumber, rtl::OStringBuffer& rOutBuffer )
 {
-    rtl::OString aBufferString( rtl::OUStringToOString( rInString, RTL_TEXTENCODING_ASCII_US ) );
+    rtl::OString aBufferString( rtl::OUStringToOString( rInString, RTL_TEXTENCODING_UTF8 ) );
     appendLiteralStringEncrypt( aBufferString, nInObjectNumber, rOutBuffer);
 }
 
_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to