OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [docbook-apps] Olinks in PDF missing valid destination?


Excellent, thanks for tracking that down and providing the fix.

Bob Stayton
Sagehill Enterprises
bobs@sagehill.net

--------------------------------------------------
From: "Alexey Neyman" <stilor@att.net>
Sent: Friday, October 25, 2013 11:01 AM
To: <docbook-apps@lists.oasis-open.org>
Cc: "Wood Nick" <Nick.Wood@ncia.nato.int>; "Bob Stayton" <bobs@sagehill.net>; "Mark Craig" <mark.craig@gmail.com>
Subject: Re: [docbook-apps] Olinks in PDF missing valid destination?

Hi Bob,

Looks like the stylesheets could produce invalid link "url(#dest=)" if
$fop1.extensions=1 and $insert.olink.pdf.frag=0. In that case, make.olink.href
template generates a string without '#something' anchor. The code in olink
template in fo/xref.xsl then tries to parse this string as follows and fails:

 <xsl:variable name="mybeg" select="substring-before($href,'#')"/>
 <xsl:variable name="myend" select="substring-after($href,'#')"/>
<fo:basic-link external-destination="url({concat($mybeg,'#dest=',$myend)})"
     xsl:use-attribute-sets="olink.properties">
   <xsl:copy-of select="$hottext"/>
 </fo:basic-link>

If the $href does not contain #, both $mybeg and $myend would be empty,
leading to invalid URL '#dest='. Fix committed in r9825.

Regards,
Alexey.


On Friday, October 25, 2013 12:37:54 am Wood Nick wrote:
Hi Bob,

I am using docbkx-tools 2.0.14 with the 1.72.0 stylesheets.  You are
correct, setting <insertOlinkPdfFrag>1</insertOlinkPdfFrag>in the POM is
the same as <param name="insert.olink.pdf.frag" select="1"/> in the
stylesheet.  I am using FOP 1.0 (we run Nexus behind a firewall and so
updates are a challenge) which does not appear to support fragment
identifiers.  From your response below I assume FOP 1.1 does?

Regards

Nick



From: Mark Craig [mailto:mark.craig@gmail.com]
Sent: Thursday, October 24, 2013 8:52 PM
To: Bob Stayton
Cc: Wood Nick; DocBook Apps
Subject: Re: [docbook-apps] Olinks in PDF missing valid destination?

Hi Bob,

What I observed with <insertOlinkPdfFrag> left undefined -- I'm assuming
that means insert.olink.pdf.frag is 0 -- I was getting
external-destination="url(#dest=)" in the .fo. No file name, no fragment.

I think docbkx-tools 2.0.14 is picking up version 1.76.1 stylesheets. What
I didn't do is get the stylesheets and try without docbkx-tools.

Regards,
Mark

On Thu, Oct 24, 2013 at 7:46 PM, Bob Stayton
<bobs@sagehill.net<mailto:bobs@sagehill.net>> wrote: Hi Mark,
Can you clarify one point for me? When <insertOlinkPdfFrag> is not set to
1, does "not properly resolved" mean the link can open the other PDF
document but not scroll to the proper location, or does it not open the
other PDF at all?  I would expect the former.

I'm not a user of docbkx-tools, but I presume setting <insertOlinkPdfFrag>
is the same as setting the DocBook XSL stylesheet parameter named
'insert.olink.pdf.frag', right?  That parameter's default value should
probably be 1, now that all XSL-FO processors support the fragment
identifiers.

Bob Stayton
Sagehill Enterprises
bobs@sagehill.net<mailto:bobs@sagehill.net>

From: Mark Craig<mailto:mark.craig@gmail.com>
Sent: Thursday, October 24, 2013 6:00 AM
To: Wood Nick<mailto:Nick.Wood@ncia.nato.int> ; DocBook
Apps<mailto:docbook-apps@lists.oasis-open.org> Subject: Re: [docbook-apps]
Olinks in PDF missing valid destination?

By the way,

When I want to resolve olinks between PDF documents, it looks like I also
need <insertOlinkPdfFrag>1</insertOlinkPdfFrag>.

Otherwise external-destinations are not properly resolved (though according
to Olink debug messages they are resolved).

Again, I'm seeing this behavior with 1.76.1.

Regards,
Mark

On Oct 23, 2013, at 3:38 PM, Mark Craig wrote:


Hi Nick,

Thanks very much for your help.

Following your suggestion does the trick:

<currentDocid>book</currentDocid>

As a result, the link gets resolved as an internal-destination in the .fo,
and this works fine in the PDF.

<fo:basic-link internal-destination="chapter"><fo:inline>link to the next
chapter</fo:inline></fo:basic-link>.

Regards,
Mark

On Oct 23, 2013, at 2:35 PM, Wood Nick wrote:


Mark,

I do not pretend to be an expert on this - I setup my pdf olinks using
Bob's excellent book plus some guidance you have posted in the past.
However, have you tried adding <currentDocid/> in the <configuration/> of
your POM and then using the sitemap in your olinkdb.xml (as I believe this
provide the location of the documents).

Regards

Nick


From: Mark Craig [mailto:mark.craig@gmail.com<mailto:mark.craig@gmail.com>]
Sent: Wednesday, October 23, 2013 10:11 AM
To: DocBook Apps
Subject: [docbook-apps] Olinks in PDF missing valid destination?

Hello,

In the past I have successfully set up Olink resolution for HTML.

I have read and tried to implement
http://www.sagehill.net/docbookxsl/OlinkPrintOutput.html#PdfLinkingSetup
But I'm not managing to do the same for PDF.

A clickable link of the Olink is there in the PDF, but with no valid
destination.

This is with docbkx-tools 2.0.14, so DocBook XSL 1.76.1 and FOP 1 (I think
1.1).

My little test is at https://github.com/markcraig/DOCS-47.
(There's only one Olink, in the para at line 20 of
book.xml<https://github.com/markcraig/DOCS-47/blob/master/src/docbkx/book.
xml#L20>.)

The main part of the target database
document<https://github.com/markcraig/DOCS-47/blob/master/src/docbkx/olink
db.xml> for the test is minimal:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE targetset[
...
<!ENTITY book SYSTEM '../../target/target.db'>
]>
<targetset>
 <document targetdoc="book" baseuri="book.pdf">&book;</document>
</targetset>

Although Olink debug messages make it look like the stylesheets are finding
a match for the link, the .fo is missing information.

In the build output, I see:

Olink debug: cases for targetdoc='book' and targetptr='chapter' in language
''. Olink debug: CaseA matched.
Olink debug: CaseA key is the final selection: book/chapter/

But the .fo has an external-destination with no actual destination:

<fo:basic-link show-destination="replace"
external-destination="url(#dest=)"

><fo:inline>link to the next chapter</fo:inline></fo:basic-link>

If I remove the baseuri value from the <document> element in the target
database document, then the external-destination attribute changes a
little:

<fo:basic-link show-destination="replace"
external-destination="url(#dest=chapter)"

><fo:inline>link to the next chapter</fo:inline></fo:basic-link>

What should I do differently for a valid destination to be generated?

Thanks for your advice.
Regards,
Mark




[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]