Работа с текстови слоеве в Aspose.PSD за Java
Преглед
Преглед
Aspose.PSD за Java е издръжлива библиотека, проектирана за работа с PSD (Photoshop Document) файлове безпроблемно в приложения на Java. Сред многото си функции, тази библиотека предлага обширна поддръжка за редакция на текстови слоеве в PSD файлове. В тази статия ще разгледаме два различни метода за редактиране на текст в PSD файлове с използване на Aspose.PSD за Java - простият подход и по-сложният метод, използващ текстови порции.
** Прост начин за актуализиране на текстов слой ** Актуализирането на текстов слой в PSD файл с използване на Aspose.PSD за Java е просто. Методът updateText на класа TextLayer улеснява лесното актуализиране на текстово съдържание в текстов слой. По-долу е показан примерен код, илюстриращ простия метод за актуализиране на текстов слой:
public class Main { | |
public static void main(String[] args) { | |
String sourceFile = "text212.psd"; | |
String outputFile = "Output_text212.psd"; | |
try (PsdImage image = (PsdImage) PsdImage.load(sourceFile)) { | |
TextLayer simpleText = (TextLayer) image.getLayers()[2]; | |
simpleText.updateText("Update", Color.getRed()); | |
image.save(outputFile); | |
} | |
} | |
} |
** Редактиране с използване на текстова порция **
Подобрен метод за актуализиране на текстов слой чрез използване на текстови порции: Докато простият подход е достатъчен за основни текстови модификации, ако се изисква по-добър контрол върху стила и форматирането на текста, използването на текстови порции предлага по-мощно решение. Текстовите порции позволяват спецификация на разнообразни стилове и параграфи в рамките на текстов слой. Разгледайте следния примерен код, илюстриращ този подход:
public class Main { | |
public static void main(String[] args) { | |
String sourceFile = "text212.psd"; | |
try (PsdImage image = (PsdImage) PsdImage.load(sourceFile)) { | |
// Assuming the necessary imports and classes are available | |
TextLayer textLayer = (TextLayer) image.getLayers()[1]; | |
IText textData = textLayer.getTextData(); | |
ITextStyle defaultStyle = textData.producePortion().getStyle(); | |
ITextParagraph defaultParagraph = textData.producePortion().getParagraph(); | |
defaultStyle.setFillColor(Color.fromName("DimGray")); | |
defaultStyle.setFontSize(51); | |
textData.getItems()[1].getStyle().setStrikethrough(true); | |
String[] strings = new String[]{"E=mc", "2\r", "Bold", "Italic\r", "Lowercasetext"}; | |
ITextPortion[] newPortions = textData.producePortions( | |
strings, | |
defaultStyle, | |
defaultParagraph | |
); | |
newPortions[0].getStyle().setUnderline(true); | |
newPortions[1].getStyle().setFontBaseline(FontBaseline.Superscript); | |
newPortions[2].getStyle().setFauxBold(true); | |
newPortions[3].getStyle().setFauxItalic(true); | |
newPortions[3].getStyle().setBaselineShift(-25); | |
newPortions[4].getStyle().setFontCaps(FontCaps.SmallCaps); | |
for (ITextPortion newPortion : newPortions) { | |
textData.addPortion(newPortion); | |
} | |
textData.updateLayerData(); | |
} | |
} | |
} |
В предоставения код най-напред достъпваме целевия текстов слой за актуализация (например image.getLayers()[1]). След това извличаме обекта textData от текстовия слой, който улеснява манипулацията на текстови порции. Създават се обекти за стил по подразбиране и параграф (съответно defaultStyle и defaultParagraph), за да служат като базов стил и параграф за текстовите порции.
След това дефинираме текстовите порции, които да бъдат включени в текстовия слой. Всяка порция представлява различен сегмент текст със своя уникален стил и форматиране. В този пример дефинираме пет текстови порции - “E=mc”, “2\r”, “Bold”, “Italic\r” и “Lowercasetext” - докато променяме техните стилове съответно.
След това итерираме през новите порции и ги добавяме към обекта textData с помощта на метода addPortion. Накрая, извикването на метода updateLayerData на обекта textData улеснява актуализирането на текстовия слой с ново дефинираните текстови порции.
Заключение Aspose.PSD за Java предлага здрави възможности за манипулиране на текст в PSD файлове. Независимо дали се изисква актуализиране на текстово съдържание или прилагане на напреднал стил и форматиране, Aspose.PSD за Java предоставя необходимите инструменти. Чрез използване на простия подход или по-сложния метод, използващ текстови порции, се постига безпроблемно манипулиране на текстови слоеве в PSD файлове.
Моля, обърнете се към целия пример за допълнителни подробности.
Пример
public class TextLayerUpdatingTest { | |
public static void main(String[] args) { | |
String sourceFile = "text212.psd"; | |
String outputFile = "Output_text212.psd"; | |
try (PsdImage img = (PsdImage) PsdImage.load(sourceFile)) { | |
// Simple way to update text layer | |
TextLayer simpleText = (TextLayer) img.getLayers()[2]; | |
simpleText.updateText("Update", Color.getRed()); | |
// More powerful way to update text layer - using Text Portions with different styles and paragraphs | |
TextLayer textLayer = (TextLayer) img.getLayers()[1]; | |
IText textData = textLayer.getTextData(); | |
ITextStyle defaultStyle = textData.producePortion().getStyle(); | |
ITextParagraph defaultParagraph = textData.producePortion().getParagraph(); | |
defaultStyle.setFillColor(Color.fromName("DimGray")); | |
defaultStyle.setFontSize(51); | |
textData.getItems()[1].getStyle().setStrikethrough(true); | |
// Update text styles for different portions | |
ITextPortion[] newPortions = textData.producePortions(new String[]{ | |
"E=mc", | |
"2\r", | |
"Bold", | |
"Italic\r", | |
"Lowercasetext"}, | |
defaultStyle, | |
defaultParagraph | |
); | |
newPortions[0].getStyle().setUnderline(true); // Edit text style "E=mc" | |
newPortions[1].getStyle().setFontBaseline(FontBaseline.Superscript); // Edit text style "2\r" | |
newPortions[2].getStyle().setFauxBold(true); // Edit text style "Bold" | |
newPortions[3].getStyle().setFauxItalic(true); // Edit text style "Italic\r" | |
newPortions[3].getStyle().setBaselineShift(-25); // Edit text style "Italic\r" | |
newPortions[4].getStyle().setFontCaps(FontCaps.SmallCaps); // Edit text style "Lowercasetext" | |
for (ITextPortion newPortion : newPortions) { | |
textData.addPortion(newPortion); | |
} | |
textData.updateLayerData(); | |
img.save(outputFile); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
} |