Jump to content

Dan Korn

Members
  • Posts

    4,884
  • Joined

  • Days Won

    17

Posts posted by Dan Korn

  1. I've been trying to reproduce this but have not been successful.  I think it might depend on specifically what your rule is returning.  Can you post a minimal sample job which demonstrates the problem?  (A collected job WITHOUT the fonts, or, even better, a PDF template with "None" data source.)

    P.S. The screenshots are helpful, but are pretty downsampled.  It might be better to post a cropped picture just of the part of the page in question rather than the entire Acrobat window.

  2. Thanks mailstar.  Regarding performance/speed, we do have some enhancements in the works along those lines.  That said, any significant architectural changes, such as multi-threading, would likely be targeted towards FusionPro Server and Producer, which run on Windows only, and not towards Creator (on either Windows or Mac).  Also, it's a very badly-kept secret that Creator already runs faster on Mac than it does on Windows (though Server and Producer are still faster, especially for high-volume jobs).  So I wouldn't expect much to improve for your Mac-based Creator workflow.  Things might be slightly faster under native Silicon than under Intel emulation via Rosetta, but again, I wouldn't expect anything significant.

    Also, in my experience, 99 percent of FusionPro templates which have "many text/graphic frames" have been painstakingly put together by copy-and-paste, and also have dozens of rules to populate all those frames, and often the logic in those rules is very repetitive, which makes FusionPro do much more work than it should to accomplish what you want.  Usually these kinds of jobs can be greatly optimized, and made more maintainable, by centralizing all of that logic into just a few rules, using things like the "Re-evaluate this rule for every text flow" setting, repeatable components, on-the-fly frame creation, and other strategies to abstract out the business logic.  I would bet that kind of thing could be done with your jobs.  I would have to see one of them to offer suggestions, of course, and I can't commit to fully analyzing and optimizing it, but I'm sure I could point you in the right direction.

    Regarding feature updates, thanks for the feedback about Copyfitting and the Drag and Drop rule.  Can you please elaborate about bullet points?  You can use the &bull; entity to output a bullet, generally followed by a <t> for a tab.

    We do have an internal JIRA database of bug reports and enhancement requests.  It's not public, but when issues are reported by multiple users, those do count as "votes" of a sort to inform us that they should have a higher priority.

    Thanks again for the feedback.  Please keep it coming!  (Feel free to start a new thread about any specific suggestion or issue.)

  3. Thanks for asking.  As someone who's worked on FusionPro for a long time, knowing that there's interest like this in the future of the product is heartening.

    We don't tend to release public roadmaps.  Probably the main reason is that plans and timelines can change, based on a myriad of factors, some of which are beyond our control, such as changes that Apple, Microsoft, Adobe, and various standards organizations make that we have to keep up with.

    I can say that we are actively working on support for native Silicon chips (M1, M2, M3, etc.) on Mac, and that we have several enhancements planned for FusionPro 14 which I think people will be excited about, things that will make template-building easier.  Beyond that, we have a lot of longer-term plans and ideas on several fronts, from architectural improvements to new areas of functionality.  Sorry I can't be more specific.

    But just to give a bit of insight, we do get pulled in a lot of different directions.  Some of this is the nature of the digital printing/publishing industry.  On the one hand, print is far from dead, and printing technology continues to improve and advance, and there is a huge demand for improvements to things like imposition, for finer control over barcodes, charts, and tables, color correction, and other things that go into putting toner on paper or other substrates and fulfilling print orders, including postal sorting and barcodes in different countries, as well as an ever-growing market for label and package printing.  On the other hand, there's rapidly increasing demand for digital delivery PDFs, which are primarily viewed online, and which, according to various regulations in different countries (and just because things should be this way), need to be accessible to people with visual impairments, which means they need to conform to accessibility specifications for tagging and reading order, which, when you're merging in variable content with static content from the background PDF, can get complicated.  We've also been working for a long with partners around the world, mainly through Ricoh, including our friends in Ricoh Japan, to add typesetting features specific to Japanese, Hindi, Arabic and Hebrew, and many other languages, which have a lot of complex requirements.  And we work with many partners on integrations, including with MarcomPortal, EFI DSF, Avanti, RSA's WebCRD, and others.  So, there's a lot on our plate, and just prioritizing all of those backlist items is a challenge.

    The other thing I can say is that feedback here on this forum is definitely taken into account in our planning.  Your ideas, suggestions, and even problems you report here do inform our priorities.

    So... what do you want to see on the roadmap?

  4. 6 hours ago, mark.arcane said:

    Since upgrading to v13

    ... from what version?  What were you running previously?

    6 hours ago, mark.arcane said:

    no longer works

    Can you be more specific?  What is the failure mode?  Does it not recognize any new records at all?  Or does it think every line is a record?

    Can you post a minimal sample job that reproduces the problem?

  5. 1 hour ago, dvincentBSE said:

    I've been able to get the preview to be right, but then all 3 pages are downloaded.  I've been able to get it so the correct page is downloaded but is also the online preview.  I have not yet been able to get it so pages one and two are my online preview and page three is my download file.

    Downloaded from where?  MarcomPortal? DSF? WebCRD?  Some other online system?

  6. Okay, well, as I noted before, we've reached the limit of what I can diagnose by looking at your job through the keyhole of just the rule.  I would need to see the entire job in order to figure out what's going on.

    But I think you should be able to tweak those settings in the OnCopyfit rule, as I also mentioned earlier.  Have you tried that?

  7. Newlines should work, but you need to include them in a literal string, between quotes, like so:

    if (Field("Program2") == "")
        return "";
    
    return "\n" + Field("Program2abbr") + ' Student Sponsorship of Up to ' + val + "\n";

    You can also use <br> tags as Alex suggests, but in that case, I would recommend calling TaggedDataField instead of Field, in case the data contains "special" characters such as ampersands, like so:
     

    if (Field("Program2") == "")
        return ""
    
    return '<br>' + TaggedDataField("Program2abbr") + '&nbsp;' + "Student Sponsorship of Up to" + '&nbsp;' + val + '<br>'; 

    Though the first version seems simpler.
     

    Note also that you don't need the "else" statement after the "return".

  8. I see, this is about the Define HTML Form feature (aka "Web Collect").  Thanks for using this!  Glad to know it's still supported in WebCRD by our friends at RSA.

    So you can create Parent/Child pick list fields, where the selection in the parent forces a selection in the child.  And you could mark the child field as hidden (not visible), so that the child selection isn't shown.

    But there's no way to conditionally hide a field based on another field's selection.  The HTML Form Definition doesn't support that level of sophistication, in terms of complex field dependencies.

    You might need separate forms for each input type to accomplish what you want.  Though there may be some other kind of more advanced custom input form offered by WebCRD; that would be a question for RSA.

    P.S. It's "FusionPro" (no spaces).

  9. 19 hours ago, IceisforHockey said:

    Is there a way to get this to copyfit if needed? Right now the OnCopyFit rule doesnt seem to work on the above rule?

    In what way does it not work?  What result are you getting, and exactly how is it different than the result you're expecting?  Are you trying to shrink the text to fit into a smaller box, or expand it to a larger box, or both?

    You probably need to change the settings in the OnCopyfit rule.  By default, the first line is this:

    if (!Copyfit(new MagnifyAttributes("text", 25, 400, 6, 72)))

    Where the parameters to the MagnifyAttributes constructor function, which are documented in the Rules Guide, and on the Objects tab of the Building Blocks dialog, are:

    new MagnifyAttributes(type, factormin, factormax, min, max)

    So by default, the point size is capped to a minimum of 25 percent of the original size, or 6 points, whichever is hit first, and a maximum of 400 percent of the original size, or 72 points, whichever it hits first.  You probably need to tweak those settings for the particular text and frame you're trying to fit.

    If you need to have different settings for different text frames, there's a section in the Rules Guide that explains how to do that, based on the frame name.

    Or, if you're using FP 13 or later, you can adjust the copyfit settings for each frame independently in the Overflow Options dialog, and you don't have to mess with the JavaScript at all.

  10. By the way, Math.ceil isn't magic; it literally just means "round up to the next highest integer (whole number)."  So in the 3-page case, 1/3, 2/3, and 3/3 round up to 1; 4/3, 5/3, and 6/3 round up to 2; 7/3, 8/3, and 9/3 round up to 3, etc.  That's exactly the algorithm you describe here:

    6 hours ago, hsprinkle said:

    So if it's a 2pager, they want pages 1-2 to have seq 1, pages 3-4 to have seq 2, pages 5-6 to have seq 3, etc.
    Same for the 3pagers, pages 1 - 3 = seq 1, 4- 6 = seq 2, 7 - 9 = seq 3, etc.

     

  11. Okay, I see.  You're multiplying the "X page count" field by X to get the repeat count.  So the rule should be:

    var seqNum = Math.ceil(FusionPro.Composition.repeatRecordNumber / pageCount);
    return FormatNumber("0000", seqNum);

    Where "pageCount" is the "X": 1 for your 1-pager, 2 for your 2-pager, etc. This should generalize for any repeat count.

    Also, I don't think you really need separate templates for 1 page, 2 page, 3 page, etc.  You could just have a global variable for that page count, that you could, say, read from a secondary data file in OnJobStart, like so:

    var PageCountFile = new ExternalDataFileEx("PageCount.txt");
    pageCount = PageCountFile.GetFieldValue(0, 0);

    Then in OnRecordStart:

    FusionPro.Composition.repeatRecordCount = Field(pageCount + " Page count") * pageCount;

    Then all you need to do is put a different number in that PageCount.txt file (or whatever you want to call it) and run again.

    You might also want to do this in the JavaScript Globals just to make rule validation easier:

    var pageCount = 1;

    Or, forget about reading the pageCount from the external data file in OnJobStart, and just change its value in the JavaScript Globals directly.

    Of course, this can be generalized further; you could repeat to handle all the page counts in a single composition with just a little more math.

    • Thanks 1
  12. i don't completely understand.  What happens if you have non-zero numbers in, say, both the "2 page count" and "3 page count" fields?  You can only set repeatRecordCount once per record.

    I might need to see a minimal example of the job, or at least a mockup of the output, to understand better.

    At any rate, it seems to me like the "sequence number" is simply the FusionPro.Composition.repeatRecordNumber.  The first three pages would be repeat 1, and the next three pages would be repeat 2, and so on, right?

  13. I see.  You can use the <hkeep> and </hkeep> tags to prevent line breaks in the names.  If each name is its own data field, then you can make a rule something like this:

    return '<hkeep>' + TaggedDataField("Name1") + '</hkeep><space>and<space><hkeep>' + TaggedDataField("Name2") + '</hkeep>';

    I could offer more specific suggestions if you post the collected job.

  14. 1 hour ago, IceisforHockey said:

    When I compose the document the first page composes perfectly and every other page the font changes to Arial.

    Is there something in this code that might be doing this?

    It's impossible to analyze without seeing the job.  Can you collect it up, with a minimal data file, and post it here?

  15. Remove the TaggedFromRaw call from the last line, like so:

    var s = [[TaggedDataField("Name"), TaggedDataField("Title")].filter(String).join(' '),
    TaggedDataField("Company")].filter(String).join('<br>');
    
    return '<span font="Helvetica 55" pointsize=22>' + s.replace(/[A-Z]/g,
    '<span font="Helvetica 95" pointsize=28>$&</span>');
  16. Ah, I see, the missing info was that you were using the "Table From Frame" rule.  There are a lot of different ways to make tables.

    I would change this up to a simple JavaScript data rule to populate the table, rather than pulling the data from the frame.  The data rule would look something like this (though I don't know 100 percent for sure this is right without your data):

    var data = [["Gift Designation", "2023 Amount"]];
    for (var i = 1; i <= 6; i++)
    {
        var fund = Field("Fund " + i)
        if (fund)
            data.push([fund, Field("Gift Amount " + i)]);
    }
    return data;

    Then you can create the "Table - from data rule" rule, referencing the data rule, and insert it into your text frame. 

  17. First of all, it's FusionPro, not "Fusion."

    I'd have to see how you're making the table now.  Many examples have a call to the AddRows function with a set number of rows.  Instead of doing that, you should iterate whatever data source you're pulling the data from, and call table.AddRow() ONLY if there are values to populate that row.  So it's not so much that you're hiding rows that are empty, it's that you're never creating those empty rows in the first place.

×
×
  • Create New...