Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,11 @@
<version>${itext.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdfCop</artifactId>
<version>1.0.1-SNAPSHOT</version>
</dependency>
</dependencies>

<repositories>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,15 @@ This file is part of the iText (R) project.
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.kernel.pdf.canvas.parser.util.PdfCanvasParser;
import com.itextpdf.kernel.pdf.xobject.PdfImageXObject;
import com.itextpdf.pdfdsl.PdfCop;
import com.itextpdf.rups.controller.PdfReaderController;
import com.itextpdf.rups.event.RupsEvent;
import com.itextpdf.rups.model.LoggerHelper;
import com.itextpdf.rups.model.LoggerMessages;
import com.itextpdf.rups.view.contextmenu.ContextMenuMouseListener;
import com.itextpdf.rups.view.contextmenu.StreamPanelContextMenu;
import com.itextpdf.rups.view.itext.treenodes.PdfObjectTreeNode;
import org.antlr.v4.runtime.misc.ParseCancellationException;

import javax.imageio.ImageIO;
import javax.swing.*;
Expand Down Expand Up @@ -123,7 +125,7 @@ public class SyntaxHighlightedStreamPane extends JScrollPane implements Observer
/**
* Constructs a SyntaxHighlightedStreamPane.
*
* @param controller the pdf reader controller
* @param controller the pdf reader text
* @param pluginMode the plugin mode
*/
public SyntaxHighlightedStreamPane(PdfReaderController controller, boolean pluginMode) {
Expand Down Expand Up @@ -162,7 +164,7 @@ public void render(PdfObjectTreeNode target) {
manager.discardAllEdits();
manager.setLimit(0);
this.target = target;
if (!(target.getPdfObject() instanceof PdfStream)) {
if (! ( target.getPdfObject() instanceof PdfStream )) {
clearPane();
return;
}
Expand All @@ -172,7 +174,7 @@ public void render(PdfObjectTreeNode target) {
if (PdfName.Image.equals(stream.getAsName(PdfName.Subtype))) {
try {
//Convert byte array back to Image
if (!stream.get(PdfName.Width, false).isNumber() && !stream.get(PdfName.Height, false).isNumber())
if (! stream.get(PdfName.Width, false).isNumber() && ! stream.get(PdfName.Height, false).isNumber())
return;
PdfImageXObject pimg = new PdfImageXObject(stream);
BufferedImage img = pimg.getBufferedImage();
Expand All @@ -194,6 +196,7 @@ public void actionPerformed(ActionEvent event) {
try {
FileDialog fileDialog = new FileDialog(new Frame(), "Save", FileDialog.SAVE);
fileDialog.setFilenameFilter(new FilenameFilter() {

public boolean accept(File dir, String name) {
return name.endsWith(".jpg");
}
Expand Down Expand Up @@ -227,6 +230,7 @@ public boolean accept(File dir, String name) {
setTextEditableRoutine(false);
}
} else if (stream.get(PdfName.Length1) == null) {
text.registerKeyboardAction(new SaveAction(text, this.target), KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK), JComponent.WHEN_FOCUSED);
setTextEditableRoutine(true);
String newline = "\n";
byte[] bb = null;
Expand All @@ -239,7 +243,7 @@ public boolean accept(File dir, String name) {
ArrayList<PdfObject> tokens = new ArrayList<>();
while (ps.parse(tokens).size() > 0) {
// operator is at the end
String operator = (tokens.get(tokens.size() - 1)).toString();
String operator = ( tokens.get(tokens.size() - 1) ).toString();
// operands are in front of their operator
StringBuilder operandssb = new StringBuilder();
for (int i = 0; i < tokens.size() - 1; i++) {
Expand Down Expand Up @@ -272,10 +276,10 @@ public boolean accept(File dir, String name) {
public void saveToTarget() {
manager.discardAllEdits();
manager.setLimit(0);
if (controller != null && ((PdfDictionary) target.getPdfObject()).containsKey(PdfName.Filter)) {
if (controller != null && ( (PdfDictionary) target.getPdfObject() ).containsKey(PdfName.Filter)) {
controller.deleteTreeNodeDictChild(target, PdfName.Filter);
}
((PdfStream) target.getPdfObject()).setData(text.getText().getBytes());
( (PdfStream) target.getPdfObject() ).setData(text.getText().getBytes());
if (controller != null) {
controller.selectNode(target);
}
Expand All @@ -291,7 +295,7 @@ protected void append(StringBuilder sb, PdfObject obj) {
byte[] b = str.getValueBytes();
String hex;
for (byte aB : b) {
hex = Integer.toHexString((aB & 0xFF));
hex = Integer.toHexString(( aB & 0xFF ));
if (hex.length() % 2 == 1)
sb.append("0");
sb.append(hex);
Expand Down Expand Up @@ -435,7 +439,7 @@ protected void initAttributes() {

private void setTextEditableRoutine(boolean editable) {
text.setEditable(editable);
if ((pdfStreamGetInputStreamMethod != null) && editable && (target != null) && (target.getPdfObject() instanceof PdfStream)) {
if (( pdfStreamGetInputStreamMethod != null ) && editable && ( target != null ) && ( target.getPdfObject() instanceof PdfStream )) {
try {
popupMenu.setSaveToStreamEnabled(pdfStreamGetInputStreamMethod.invoke(target.getPdfObject()) == null);
return;
Expand All @@ -457,7 +461,7 @@ private void clearPane() {
/**
* a serial version id.
*/
private static final long serialVersionUID = -3699893393067753664L;
private static final long serialVersionUID = - 3699893393067753664L;

}

Expand Down Expand Up @@ -492,6 +496,7 @@ public void append(String s, Map<Object, Object> attr) {
}

class UndoAction extends AbstractAction {

private UndoManager manager;

public UndoAction(UndoManager manager) {
Expand All @@ -508,6 +513,7 @@ public void actionPerformed(ActionEvent evt) {
}

class RedoAction extends AbstractAction {

private UndoManager manager;

public RedoAction(UndoManager manager) {
Expand All @@ -522,3 +528,33 @@ public void actionPerformed(ActionEvent evt) {
}
}
}

class SaveAction extends AbstractAction {

private final ColorTextPane text;
private final PdfObjectTreeNode target;

public SaveAction(ColorTextPane text, PdfObjectTreeNode target) {
this.text = text;
this.target = target;
}

public void actionPerformed(ActionEvent evt) {
String contentStreamContent = this.text.getText();

PdfCop pdfCop = new PdfCop();

try {
pdfCop.compile(contentStreamContent);
System.out.println("Syntax compiled successfully!");
PdfObject targetPdfObject = this.target.getPdfObject();
if (targetPdfObject instanceof PdfStream) {
PdfStream stream = (PdfStream) targetPdfObject;
stream.setData(contentStreamContent.getBytes());
}
} catch (ParseCancellationException pce) {
System.out.println("Syntax failed to compile: " + pce.getMessage());
}

}
}