All plugins and renderers can be started without Python. The Python installation is checked only when Python is really needed (i.e. when a script starts with #!py). If the installation is missing, Python scripts return the error 1. For the first Python script, a corresponding warning message is also shown. The following Python versions are expected:

By the way, you can have any other, even newer Python version(s) installed. These versions are ignored by the priint:comet plug-ins and by comet_pdf.

Because this file contains entries from our bug tracking system, the content of this file is partly in German.

The table describes the features and bug fixes of the priint:comet pdf renderer 4.2.

Revision    Case Description

v4.2 R33833

13.11.2023

ATTENTION - END OF LIFE

This is the last REGULAR release of comet_pdf v4.2. Bug support for v4.2 will be discontinued at the end of April 2024.

TW 2772359 - frame::get_color returns empty colorRef

According to the documentation, the Python method comet.CPageItem.getFillColor returns the color and any swatch applied:

tuple [CColor, CSwatch | None]

That's true so far, but in the renderer the swatch is always None.

This is fixed.

v4.2 R33655

23.10.2023

Python Support for --global

TW 2736111

I noticed a behavior when using global variables in Python that are set when the comet renderer is called.
When I try to use the global in Python (like function variables of a placeholder) I get an empty string.

Global variables set by the commandline option -g can now be used in Python aswell.
More information can be found here.

Python changes

There are new Python functions available:

The following functions have been renamed (old names are still valid for backwards compatibility)

TW 2748312 - --shortcuts path:name not working on Windows

comet_pdf --shortcuts path:name not working on Windows

This is fixed.

TW 2743775 - Exceptions while using Python methods for swatches

The Python functions for swatches seem to have some bugs:

  • getName: Did not work.
  • getSpace/getModel always return errors
  • getColors leads to a crash

All fixed.

TW 2748161 - frame::scale not implemented for comet_pdf

The functions frame::scale and frame::scale_to unfortunately do nothing with comet_pdf. The frames remain unchanged.

The implementation was, as you might imagine, a bit of a bigger work. Both methods now also work with comet_pdf.

TW 2743775 - Python methods for CSwatch cause exceptions

I noticed when using some methods of the Python module "comet.CSwatch" on the Comet renderer that they generate exceptions. However, in Indesign they work as expected.

The functions CSwatch.getName, CSwatch.getModel and CSwatch.getColors either caused exceptions or crashes.
The problem is fixed now.

TW 2745917 - textmodel::set_charstyle for comet_pdf

We could use the textmodel::set_charstyle function quite well in our project. Unfortunately the function is not available for comet_pdf. Could you do that?

We can. The function textmodel::set_charstyle is now available for comet_pdf too.

TW 2743461 - comet_pdf crashes while building repeating elements

comet_pdf crashes while building repeating elements.

This problem is fixed now.

TW 2742343 - Wrong text output in rotated circles

If I want to output text in a rotated circle (so that the text appears somehow diagonally in the circle), then the text is divided into two parts in the middle of the circle.

This problem is fixed now.

v4.2 R33520

26.09.2023

TW 2712753 - layer::add_i not working for empty layer name

Calling layer::add_i should create a new layer with an autogenerated name behind the given index. Unfortunately, this does not work under comet_pdf - no new layer is created.

Fixed now.

TW 2712752 - Wrong autogenerated layer names

The layer names automatically generated by comet_pdf are unfortunately not quite correct. The generated names are " 1", " 2", ... . But it should be "Layer 1", "Layer 2", right?

Fixed now.

v4.2 R33466

13.09.2023

TW 2710056 - Colored terminal output of comet_pdf even if the no_bash_colors option is set

Even if the --no_bash_colors option of comet_pdf is set, some terminal output is still colored. For example:

  • Web Image downloads
  • The EXIT code at the end of the program

These 'bugs' are fixed now.

TW 2618629 - interactive::set_pdf_option not working as expected

Unfortunately, the interactive::set_pdf_option function does not work properly with kPDFPrintVisible. Values > 1 are always set as 1.

This bug is fixed.

TW 2653296 - Reset list numbering not working as expected

I have a text with some numbered lists like this in InDesign:

  1. aaa
  2. bbb
  3. ccc
sdcsdfsdf
  1. ddd
  2. eee
  3. fff
In the renderer output, however, the numbering at ddd unfortunately continues with 4, 5, 6.

The trick here is as follows:

  • aaa, bbb, ... are using the list level 2.
  • ddd, eee are also using list level 2
  • BUT: The text between the two lists (sdcsdfsdf) uses list level 1 AND resets its numbering to 1

We do the same in the renderer now. This solves the problem.

TW 2653374 - Missing numbering list in destination document

I have a template with some Numbering Lists (Due to bug #2653360 of the priint:comet InDesign® plug-ins I've inserted the definitions manually into the W2ML). Unfortunately, when I insert this template into a sample document, the numbering in the lists is not set. There is always ^#^t or so.

Yes, InDesign apparently copies missing numbering lists to the target document automatically. comet_pdf does not do that so far.

Missing numbering lists are now automatically taken over when inserting templates. Existing lists remain unchanged. This solves the problem.

TW 2649032 - Cell overset not always shown

With the -ao option comet_pdf displays text oversets in table cells (like in InDesign) with a red dot. This works well if the cell is left empty. But for cells that show only partial text, the red dot for the overset is missing.

The 'bug' is solved now. Here is a screenshot of the same table in InDesign® and comet_pdf:

v4.2 R33300

21.07.2023

PDF Layers

TW 2629504

The layers of InDesign® documents can now be created 1:1 as PDF layers as well.

See here for more information.

TW 2633859 - PDF error when form fields have multiple statuses

If a form field has multiple status objects (e.g. Normal, Rollover, Click), no PDF can be created because the identifiers must be unique:

PDFlib exception occurred : [2842]
# PDF_create_field
# Invalid field pathname 
    'Button 36' (name 'Button 36' already exists)
# Removing invalid result '/Users/paul/Desktop/akquise_tpl.pdf'

Multiple object states are not supported by comets_pdf for now. We therefore now check whether another control should be created for the same interactive object. In this case, the creation of the control is rejected and a warning is generated:

Multi State of 'Button 36' ignored for object 294 in frame 553

Please note that uniqueness is only checked for statuses of the same form field! The use of the same identifier for different controls is still prevented (otherwise the form fields would be missing in the document - an error you would probably not notice until much too late).

Attention : The W2ML must be created with at least v4.2 R33222 of the InDesign plug-ins.

TW 2628207 - Export Values of Comboxes

Would it be possible to provide the combo boxes with an export value?

var field = this.getField("Kombo 34");
var selectedIndex = field.currentValueIndices;
var exportValue = field.getItemAt(selectedIndex);
var displayValue = field.getItemAt(selectedIndex, false);

app.alert ('Exportvalue : "' 
   + exportValue 
   +' DisplayValue : "' 
   + displayValue +'"')

Unfortunately this is only possible to a limited extent. We have now given the export values the same values as the display values. Then field.currentValueIndices is defined well in all situations.

TW 2618629 - Hidden state for interactive elements (II)

Since the last release R33222 unfortunately all interactive form fields remain invisible.

Uuh, we made a small mistake when implementing the different visibilities. The problem is solved now.

v4.2 R33222

06.07.2023

GREP-Styles

TW 2626925

comet_pdf now also supports a (subset) of the GREP-Styles used in InDesign®.

See here for more information.

TW 2618500 - Despite on deactivation words are hyphenated

Even if hyphenation is turned off in a paragraph style, the words of the paragraph will be hyphenated if needed.

The error occurs in the following context:

...
<ParaStyle:no_hyphen>...
<ParaStyle:>...
<ParaStyle:>...

In this case, the hyphenation setting was not correctly applied to the following (unnamned) paragraphs. The error is fixed.

TW 2618629 - Hidden state for interactive elements

Would it be possible that using the interactive::set_pdf_option function, interactive can also be set to 'hidden'? Currently, only 'All' and 'Not in Print' can be set for the visibility.

This is supported now. For more information see here.

v4.2 R33093

19.06.2023

TW 2576622 - product::get with keepWithNext always return 0 in comet_pdf

Even if I set product::set (p, kProductKeepWithNext, 1); a line before, product::get (p, kProductKeepWithNext) always returns 0 in comet_pdf. But the property is evaluated anyway, so it seems to be just a small bug in the function product::get.

You're right. The 'problem' is fixed now.

TW 2583127 - Python: Applying cell styles throws errors

table.setCellStyle (0, rowIndex, 1, -1, "CELL_STYLE_FIRST_ATTRIBUTE_LABEL") throws an error.

FXD

v4.2 R33000

23.05.2023

Keep Products Together

TW 2569076

Keeping two products together while building a product is now also supported by come_pdf.

TW 2565601 - Using two buttons in combination

When creating a w2ml file with 2 buttons (for example one for post and one for resetting) then the creation of the pdf fails.

This will be fixed in the next release of the InDesign plugins (ATTENTION: The error occurred in the W2ML export from InDesign, not in comet_pdf!).

v4.2 R32862

04.05.2023

Linearize PDFs

TW 2547898

To make the viewing faster over the Internet, PDFs can be 'linarized'. Is it possible to make this option available in the comet_pdf?

This can now be done with the new program option --linearize:

--linearize       Off : 0 | no | off
				  On  : 1 | yes | on
TW 2551940 - link:content : Taggedtext export problems

Placeholders collected with linklist::collect output the correct plain text of the text placeholders with link::content. But when I export the content as TaggedText, I get the text of the whole frame each time.

TaggedText export of text parts was not supported at all until now. This is now implemented.

TW 2522723 - Set/Get document metadata by cscript (2)

Thanks a lot for implementing this feature. I tested it and it seems to work well. All Attributes were set in the w2ml-file of the Comet-PDF Renderer. Although it seems, like "Author Title" and "Copyright Notice" are not transported to the exported PDF. When exporting that file from InDesign, the correct fields are populated.

We have implemented a few more features.

Attention: To ensure a correct interaction between InDesign® and comet_pdf, both installations must be renewed!

v4.2 R32762

21.04.2023

Configurable Shortcuts Path

TW 2529689

For a better configuration of our projects it would be nice to be able to read the shortcuts not only from shortcuts.xml next to comet_pdf.

This can now be done with the --shortcuts option (plural) now. For more information see here.

Avoid Word Breakings

TW 2535700

With InDesign I can specify that parts of a text are not breaked. To do this, I edit the desired text with the 'Character' panel (CMD + T) and choose the flyout menu 'No Break' (or similar). In TaggedText the property is set with the tag <cNoBreak:1>your text<cNoBreak:>. Unfortunately, however, the tag cNoBreak is neither exported to W2ML nor supported by comet_pdf. Is there a way to set the noBreak property in the PDF as well?

We implemented this feature now. Please note the following:

  1. If the property is to be transferred to W2ML by InDesign, new plugins must be used too.
  2. The built-in HTML to TaggedText machine of comet_pdf does not support the CSS definition word-break (or so). To set this property in an HTML text, you have to use the <?IDTT ?> pseudo tag.

%!TT_html_...<?IDTT <cNoBreak:1> ?>
antiossidante:*estratti
<?IDTT <cNoBreak:> ?>...
TW 2540026 - comet_pdf colorises too much table columns

The function table::colorize_cols colors not only the requested column(s) but also all columns of cell merges in the requested column(s).

This is fixed now.

TW 2531849 - frame::restore_text not available for comet_pdf

I need to insert a whole set of tables into a frame. I have defined the tables in their own templates and insert them into the text using frame::restore_text. Unfortunately this command is not defined for comet_pdf. Would it be possible to implement this function for comet_pdf as well?

The functionality of frame::restore_text was already used internally by comet_pdf. We have now made it available for cScript as well.

TW 2519799 - Interactive Javascripts do not work

I created an interactive PDF element with a Javascript. But what ever I try, the script is not executed in Acrobat.

I'm sure it used to work in the past. But somehow it got rusty. Now it works again :-)

TW 2519784 - comet_pdf : interactive::create cannot create push buttons

Unfortunately, in comet_pdf the interactive::create function cannot create buttons (kPushbutton). The following message appears:

# interactive::create, frame %d : 
multistates and push buttons not implemented for now.

It would be very helpful if you could at least create buttons.

Pushbuttons are now also supported by comet_pdf. Multistates are still not supported.

TW 2519692 - interactive::set_pdf_option with kPDFCaptionDown creates wrong result

If I use the function interactive::set_pdf_option with the option kPDFCaptionDown, then if the button is down not the given label but a long number is shown.

This bug is resolved.

TW 2519567 - interactive::set_pdf_option returns wrong results for German Umlauts like äöü

For calling

interactive::set_pdf_option (
    fr, 
    kPDFDefaultValue, 
    "höpöhöpö äöüß"
);

I get the this PDF:

Apparently, at least Acrobat requires Windows ASCII encoding at this point. That's a bit quirky, but if that's the way it's supposed to be, okay. We did the same with check marks, radio buttons and with list items.

TW 2406219 - Wrong Logfile Name idlog_cs15.log

The following combination causes the renderer to crash:

  1. You run multiple comet_pdf's at the same time
  2. The comet_pdf's are executed without a logfile given (i.e. without the -v ... option)
  3. In the folder of comet_pdf there is the configuration file log.xml

In the situation described above, each renderer writes to the same log file. This will lead to a crash after a (short) time. To make matters worse, the log file has the wrong name idlog_cs15.log.

The problem is fixed now. Each renderer now writes its own log file

$DOCUMENTS/Logs/comet_pdf/U12345.log

where 12345 is the process ID (pid) of the renderer. The path of the logfile is written to the terminal at the end of the program.

v4.2 R32585

21.03.2023

No Functional Changes

v4.2 R32423

01.03.2023

Python Enhancements

The following improvements are now available for the Python integration:

  • Selecting the page when placing a PDF is now possible
  • Consistency updates
For more information see here

TW 2483470 - table::broaden_to_frames ignores the frame strokes

In comet_pdf the function table::broaden_to_frame ignores the weight of the frame strokes. If the frame has strokes > 0, the table extends beyond the frame on the right.

This error has been fixed. Additionally, the cell strokes weight of the left and right cells of the table are included in the calculation.

TW 2471998 - Python version is not determined correctly under Linux

I have installed Python 3.10 on my Ubuntu 22.04. But comet_pdf always expects me to install 3.8. But this version is not available for Ubuntu 22.04.

Unfortunately, we made a small mistake when determining the available Python version under Linux. The error is fixed.

v4.2 R32286

07.02.2023

run_python extended The cScript function run_python now supports IDType, IDTypeList, Product and ProductList as input variables.
TW 2459284 - Crash on python function CPage.setSize

Using the Python function Page.setSize will reproducible crash InDesign. The error occurs on the Mac only.

The bug is fixed now.

v4.2 R32141

17.01.2023

doclink for comet_pdf

TW 2421657

The document::get_links function and all of the frame::doclink functions are now available for comet_pdf too:

Improved Excel Import

The Excel import (e.g. excel::read) now reads all standard number formats and all date/time formats. Only user-defined numbers are not yet imported in an Excel-compliant way.

Python Enhancements

There are several new enhancements to the Python integration, inlucing a bugfix for the notorious 'ModuleNotFoundError'.
For more information see here

TW 2419419 - Empty comments not exported into PDF notes

Comet-Notes with no or only an empty text in their comments are not exported as PDF notes by comet_pdf.

This is done now.

TW 2419395 - Wrong encoding in Comet Notes after exporting by comet_pdf

When I export the Comet notes with comet_pdf, Unicode characters are automatically converted to <0xXXXX>. But this should happen only in TaggedText, right? But not e.g. in title and responsible of a note.

Yes, of course you are right. The error is fixed.

TW 2418254 - Round corners of notes are lost with comet_pdf

When I let comet_pdf edit a document with Comet notes and save it with --autosave, the rounded corners of the Comet Notes are lost.

Yepp, this is solved now :-)

TW 2418204 - Frame and group notes are overlapping in PDF of comet_pdf

If a frame has frame AND group notes, then the PDF notes that comet_pdf generates from it (with the --annot option) will overlap.

This problem is solved.

TW 2418190 - Comet Notes with page index are wrong placed by comet_pdf

Comet notes with a page index are always placed one page behind the given page by comet_pdf when exporting with --annot.

The problem is solved now.

TW 2418191 - comet_pdf cannot create PDF with option --annot

If the option --annot is given (Create PDF notes from the Comet Notes) the creation of the PDF fails with the PDFlib error 'content for value must not by empty' in function PDF_create_annotation.

The problem is fixed now. It's a side effect of the new outlined Comet Notes introduced in v4.2.R31859.

TW 2413439 - frame::image with kPlaceLikeExisting distorts images

When I replace an image with comet_pdf and frame::image with kPlaceLikeExisting, the new image is displayed in exactly the same size as before. But if the new image has a different aspect ratio than the old image, the new image will be distorted.

Unfortunately, this is true. We now adjust (as in InDesign®) the height according to the new aspect ratio. This solves the problem.

v4.2 R32064

20.12.2022

Speed Optimization

By optimizing the file queries, we were able to achieve a significant increase in performance. In XML offline data connections, this can reduce the execution time by up to 15%.

Please Note: By using Web Images and in other data connection types (ODBC, SOAP, PubServer), the performance increase can be significantly lower.

TW 2406062 - How to show the placeholder states in comet_pdf?

With the -ap option comet_pdf can mark the text placeholders in the PDF. This is great. Can I also show the states of the placeholders somehow?

We used a little trick: We use fixed strong colors instead of the symbols and write the text in white above. The colors used are described here.

TW 2406043 - comet_pdf does not export changed states of placeholders

Unfortunately, when I load or update text placeholders with comet_pdf, the states of the placeholders are not written to the output W2ML. If a document created this way is then opened in InDesign, the old status (or OKAY) is still there. With frame placeholders, on the other hand, it works.

Yes, the information for text placeholders is transported via the tag. But this has no indication for the status.

We have added a corresponding attribute to the tag, so the status of the text placeholders can now also be transported back and forth between InDesign and comet_pdf. The attribute is named "state" and have the sync state values described in placeholder::set_sync.

TW 2383440 - comet_pdf crashes on Mac OS Ventura

Every time a template is to be inserted, comet_pdf crashes immediately under Mac OS 13 (Ventura). In the crash log the last thing is about csystem::ethnetID.

The EthernetID is used to get unique IDs for the placeholders. Apparently Apple has changed something about the corresponding function. In any case, we fetch the EthernetID a bit differently now. This solves the problem.

v4.2 R31940

28.11.2022

No Functional Changes

v4.2 R31859

09.11.2022

TW 2317567 - itemlist::move_to does not work correctly

If the list of frames contains frames on different pages, the itemlist::move_to function does not work correctly with comet_pdf. Only the frames of the side of the first frame are moved correctly.

The problem is solved now.

v4.2 R31755

17.10.2022

TW 2270252 - table::cell::get_cellid missing

The following cScript functions are available for comet_pdf now too:

v4.2 R31565

22.09.2022

Lineends for Curves

TeamWork 2173936

Also arbitrary curves (and not only straight lines) can now be displayed with line ends (arrows). Here's a small screenshot:

Python enhancements

There are several new enhancements to the Python integration:

New functions
Several bugfixes
and more...

For more information see here

run_python expanded The CScript function run_python now supports passing a wide range of custom global variables to the Python script
TeamWork 2220370 - Page reorganization with hidden frames

Our customer thinks that it used to be possible to use a page layout or page reorganization in such a way that the distance to the next product was not increased by hidden frames.

This is a regression of fix FogBugz 32585

We reverted the change and are exploring other options

TeamWork 2173931 - Paths always closed

When I define a path (e.g. a curved line), this shape is always closed. An additional line is always drawn from the end point to the start point of the curve.

FXD

TeamWork 2212849 - Product build calculates grid position wrongly During a row-wise product build it can sometimes happen that the grid position of the next product is calculated wrongly when layout rules change the size of the current product in the situation kAfterBuild. This then causes wrong placement on a newly created page.

FXD

run_python provides wrong values for gLen When using the CScript function run_python in a text placeholder which has loaded text before the call, the value of gLen is wrong and reflects the initial value before replacing the text

FXD

We now properly update the value of gLen before executing the Python script

v4.2 R31400

12.08.2022

TeamWork 2161175 - Cannot download mediaproxy URL

priint:comet URLs for the media proxy cannot be loaded if the download URL contains encoded characters of the like %3A. These characters are apparently converted back before the download.

In the example the %XX's are re-translated into their original letters. But the included download URL must be passed on unchanged:

https://aaa.bbb.de/...?downloadUrl=https%3A%2F%2F...
https://aaa.bbb.de/...?downloadUrl=https://...

Yes, in the plugins any corrections are made to the URLs. This was exactly the default in other cases and without these corrections these URLs will no longer work. Since we can't decide which parts of a URL need correction and which don't, I suppress the correction in all URLs that contain the text 

    ?downloadUrl=http

(in exactly this notation!) after consulting our IT. This solves the problem (again : for exactly such URLs).

TeamWork 2165651 - LineEndStart/End (Arrows) for lines

I would need some arrowed lines in comet_pdf. Is that possible?

We added the full range of line ends suppported by InDesign into comet_pdf too (lot of work). See here for detailed information.

Please note : You also need to use InDesing plugins of at least v4.2 R31360 to create the according W2MLs!

TeamWork 2155148 - frame::moveto wrong for frames with outer stroke contour

Frames with an outer or centered contour are placed incorrectly by frame::moveto. You can easily reproduce the problem with a frame with a outer contour and the following function that moves the given frame to its current position:

int mvframe (int uid)
{
	ItemRef 	fr = item::alloc ();
	float   	l, r, t, b;

    item::define (fr, 0, uid);
    frame::bbox(fr, &l, &t, &r, &b);
    frame::moveto (fr, l, t);
    item::release (fr);

    return 0;
}

This problem is fixed.

v4.2 R31313

25.07.2022

TeamWork 2127848 - Scriptfunction for user interactions

I have to test the same renderer command over and over again but with different data files. I could change the datafiles.xml each time or give the call a global variable or rename the file each time. But all this is somehow always cumbersome and I forget the different filenames even after two days. Is there not a better solution?

For example, you could define different shortcuts. Anyway, we have another solution:

We have made a renderer version of the good old askpopup2. The function does not support database calls and xmlqueries. But if you fill the IDTypeList of the function, the entries are shown in the Terminal and with the input of a number you can select an entry.

v4.2 R31168

08.07.2022

FogBugz 32562 - How to impot > character using html::to_tagged

Any &gt;-escaped > in HTML will cause html::to_tagged to fail. The same happens with &lt; of course.

This is fixed now.

v4.2 R30871

20.06.2022

FogBugz 32506 - Still Having Problems with Passwords in Web Image URLs

We still habe problems with the encrypted passwords in URLs of Web Images. The fix of case 32406 is working: BUT : If the encrypted pwd ends with a slash itself, you will get 4 slashes and your method with the three slashes around the encrypred pwd will fail.

What a hassle. We would most like to write the password unencrypted into the document. But okay, we solved this problem too.

v4.2 R30779

23.05.2022

FogBugz 32406 - cURL Error 3 while downloading Web Images

I have an Web Image URL containing a user name and a password. The password is kindly encoded when writing to the document. But apparently the encoding can contain characters that break the URL, e.g. some additional /s.

This bug is fixed now. Encoded password are enclosed in /// now automatically. Here's an example:

http://paul:///AU+mn2/87c/Ppm8=///@priint-grid-...

v4.2 R30683

04.05.2022

FogBugz 31606-2 - No Table Break while building product

We still have problems with tables not starting until the following page : Some table do not start at the current page but on the next page only.

If a frame has overset during product buildup, the continue-template is used. Before we do that, we test to see if increasing the frame size will reduce the overset. Unfortunately, in comet_pdf we can only see that we are inside a table - but not how far the table fits. For this we would have to draw the table - a huge lack of performance. But this way, unfortunately, we only see that we have an overset but it doesn't change.

With a little workaround we could fix the problem.

Important Note to PDFlib 10 : PostScript Type 1 Fonts are deprecated in PDFlib 10!

v4.2 R30603

12.04.2022

Native Version for Mac M1

With this release we present the first native M1 version of the renderer.

To install the native version please follow the instructions of 1 ReadMe of your installation package.

FogBugz 32282 - Wrong inline positions in tables

I have an InDesign document with some tables that have inlines in them. When I export this document to W2ML and let the renderer output it, the inlines are positioned incorrectly.

The problem ist fixed now.

FogBugz 32280 - Error while using option -p items.xml

My renderer call uses option

   -p items.xml

to defined the list of products to be build. This works using comet_pdf v4.1.8 but using comet_pdf v4.2 I always get the error:

Error 500 while reading products xml 'items.xml'

The problem is solved now

v4.2 R30464

23.03.2022

See History v4.1.8

v4.2 R30323

02.03.2022

Hello, this is the first release version of comet_pdf v4.2


v4.2 R30121

30.09.2021

No Functional Changes